查看: 2532| 回复: 11
收起左侧

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

水逼一枚 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   209
99%
1%
2

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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

1.png



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

谢谢!

点评

已修改  发表于 2014-9-4 10:12
问题已解决,为什么不能编辑帖子了呢?想把题目修改下。。。没找到编辑在哪儿?  发表于 2014-9-4 07:27

上一篇:k sum和Best time to buy and sell stock
下一篇:公开课CS106字幕急求!!!!
victor2100 2014-9-4 06:24:20 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   41
100%
0%
0
如果你不用objectReference.compareTo()方法,当然不用实现comparable。

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

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

使用道具 举报

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

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

明白了,谢谢啦!
回复

使用道具 举报

movefast 2014-9-4 07:31:53 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   9
100%
0%
0
这有一个简单的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 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   209
99%
1%
2
movefast 发表于 2014-9-4 07:31
这有一个简单的comparable的介绍http://stackoverflow.com/questions/3718383/java-class-implements-compa ...

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

使用道具 举报

movefast 2014-9-4 14:17:39 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   9
100%
0%
0
水逼一枚 发表于 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 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   209
99%
1%
2
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 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   41
100%
0%
0
那个data类型就是comparable就可以了,Integer也是comparable的子类。真正要进行.compareTo()是Integer class
回复

使用道具 举报

 楼主| 水逼一枚 2014-9-5 02:37:20 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   209
99%
1%
2
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 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   41
100%
0%
0
水逼一枚 发表于 2014-9-5 02:37
还有个小问题哈,就是,auto-boxing操作,比如我们写Double wrapper = 29.95
这个语句背后是不是其实意 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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