第十二条:考虑实现Comparable接口
2016-04-26 14:26
295 查看
compareTo方法并没有在Object中声明,它是Comparable接口中唯一的方法。compareTo方法不但允许进行简单的等同性比价,而且允许执行顺序比较,它与Object的equals方法具有相似的特征,它还是个泛型。
类实现了Comparable接口,就表明它的实例具有内在的排序关系。一旦类实现了Comparable接口,它就可以跟许多泛型算法以及依赖于该接口的集合实现协作。比如按字母顺序,按数值顺序或者按年代顺序,compareTo方法的通用约定于equals方法的相似:
将这个对象与指定的对象进行比较。当该对象小于、等于或大于指定对象的时候,分别返回一个负数、零或者正整数。如果由于指定对象的类型而无法与该对象进行比较,则抛出ClassCastException异常。
在下面的说明中,符号sgn(表达式)表示数学中的signum函数,它根据表达式的值为负值、零和正值,分别返回-1、0和1。
必须确保所有的x和y都满足sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。
必须确保这个比较关系是可以传递的:(x.compareTo(y) > 0 && y.compareTo(z) > 0)暗示着x.compareTo(z) > 0。
最后,必须确保x.compareTo(y) == 0 暗示着所有的z都满足sgn(x.compareTo(z)) == sgn(y.compareTo(z))
强烈建议(x.compareTo(y) == 0) == (x.equals(y)),这个绝非必要,一般来说,任何实现了Comparable接口的类,若违反了这个条件,都应该明确说明。
相关文章推荐
- poj #3971:scales
- MYSQL之hex()函数查看表的一字段值的编码值
- Android listview加载本地图片
- BeautifulSoup 根据文本内容反查标签
- java程序打包成jar 配置文件信息路径
- decimal 和 numeric (Transact-SQL)
- SpringMVC—相关注解介绍
- IOS 发布 Itunes 上的操作流程
- Linux下tcpdump命令的使用
- scrollview添加自定义view的滑动显示问题
- java中list,set,map的区别
- 关于volley框架源码解析
- 关于JS的Ajax bf52 方法导致跨域问题的解决办法
- 在PHP调用JS中的方法,以此来解决浏览器兼容问题
- ZigBee3.0
- c# 3.0 get set 默认值
- d3.js——弦图的绘制
- 关于子类调用基类的构造函数的各种问题
- JavaScript入门学习5 DOM操作2
- 程序员笑话大全,程序员的这108个笑话,你都看得懂吗?