[职场感言] 工作一年了,聊聊三件事

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 1301|回复: 11
收起左侧

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

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

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

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

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,不用你自己显式转换。
回复 支持 反对

使用道具 举报

全球28万学生4.7分推荐
 楼主| 水逼一枚 发表于 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
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-24 04:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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