一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 744|回复: 11
收起左侧

[学Java/C#] 【已解决】请教Java Comparable接口问题

[复制链接] |试试Instant~ |关注本帖
水逼一枚 发表于 2014-9-3 12:55:21 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
本帖最后由 DamienPooh 于 2014-9-4 10:12 编辑

1.png


如图所示:
假如我就只希望我的Node存放的是int数据,我一定要去取包装成Integerclass这样就能实现comparable接口了吗?
这里所有数据结构如果都可以自己实现的话,那这个datatype要不要Comparable是不是完全看你在进行比较大小的时候是怎么写的呢?
如果我根本不会用到类似objectReference.compareTo()这个方法,是不是就没有必要一定dataComparable的呢?

谢谢!

victor2100 发表于 2014-9-4 06:24:20 | 显示全部楼层
如果你不用objectReference.compareTo()方法,当然不用实现comparable。

但问题是lz给出的程序是在写binary search tree,那么tree结点上的数据就一定要是comparable的
不然怎么叫binary search tree

你把int传入上面的add方法,编译器会自动做boxing操作,就是把int转成Integer,不用你自己显式转换。
回复 支持 反对

使用道具 举报

 楼主| 水逼一枚 发表于 2014-9-4 07:25:15 | 显示全部楼层
victor2100 发表于 2014-9-4 06:24
如果你不用objectReference.compareTo()方法,当然不用实现comparable。

但问题是lz给出的程序是在写bin ...

明白了,谢谢啦!
回复 支持 反对

使用道具 举报

movefast 发表于 2014-9-4 07:31:53 | 显示全部楼层
这有一个简单的comparable的介绍http://stackoverflow.com/questions/3718383/java-class-implements-comparable,data是comparable因为人家的signature就这么写的你必须要supply comparable,具体到concept上是因为你这个data structure insert node时候会有comparison,所以essentially你实际就是需要给他这个data structure提供一个你的这个object的compareTo方程当API给他用除非你用像Integer,String这类java已经implement完comparable的obj
回复 支持 反对

使用道具 举报

 楼主| 水逼一枚 发表于 2014-9-4 13:47:23 | 显示全部楼层
movefast 发表于 2014-9-4 07:31
这有一个简单的comparable的介绍http://stackoverflow.com/questions/3718383/java-class-implements-compa ...

感谢回复明白了哈,另外问下你说的signature这个术语是指的什么呢?
回复 支持 反对

使用道具 举报

movefast 发表于 2014-9-4 14:17:39 | 显示全部楼层
水逼一枚 发表于 2014-9-4 13:47
感谢回复明白了哈,另外问下你说的signature这个术语是指的什么呢?

formal def我还真不知道哈:P 我的理解就是方程第一行啦,specify了名字,access control, static or not, input type/output type
回复 支持 反对

使用道具 举报

 楼主| 水逼一枚 发表于 2014-9-4 14:45:35 | 显示全部楼层
victor2100 发表于 2014-9-4 06:24
如果你不用objectReference.compareTo()方法,当然不用实现comparable。

但问题是lz给出的程序是在写bin ...

不好意思,再多问一句哈,编译器会自动做box操作,但实际上我Node那个class在定义data的类型时还得是Integer对吧?只是参数传递的时候可以是int, 但真正要进行.compareTo()还是得Integer class对吧?
回复 支持 反对

使用道具 举报

victor2100 发表于 2014-9-4 15:04:07 | 显示全部楼层
那个data类型就是comparable就可以了,Integer也是comparable的子类。真正要进行.compareTo()是Integer class
回复 支持 反对

使用道具 举报

 楼主| 水逼一枚 发表于 2014-9-5 02:37:20 | 显示全部楼层
victor2100 发表于 2014-9-4 06:24
如果你不用objectReference.compareTo()方法,当然不用实现comparable。

但问题是lz给出的程序是在写bin ...

还有个小问题哈,就是,auto-boxing操作,比如我们写Double wrapper = 29.95
这个语句背后是不是其实意味着在heap上有一个对象创建出来了,然后这个对象中有double域的值为29.95是吧?然后用的时候也可自动unboxing对吗?就是本质上虽然自动完成auto-boxing和auto-unboxing,但实际上堆上是有新对象创建了的对吧?
回复 支持 反对

使用道具 举报

victor2100 发表于 2014-9-5 11:48:30 | 显示全部楼层
水逼一枚 发表于 2014-9-5 02:37
还有个小问题哈,就是,auto-boxing操作,比如我们写Double wrapper = 29.95
这个语句背后是不是其实意 ...

理论上是的。但是编译器对于小范围的Integer会做优化。见这个帖子:
http://stackoverflow.com/questio ... eger-i-new-integer0
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-4 06:19

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表