TreeMap,TreeSet,Arrays,Collections可能调用实现了Comparable接口的对象的compareTo()进行自然排序。实现compareTo()与实现equals()基本原则类似,不同点包括:
1.如果传入的比较对象的类型与当前对象不同,应抛出ClassCastException
2.如果x.compareTo(y)==0,那么应该x.equals(y)==true
BigDecimal没有遵守规则2,以下测试将通过,这可能导致以下2个BigDecimal对象可以同时放入一个HashSet对象里(因为equals()返回false),但是只能有其中一个放入TreeSet里(因为compareTo()返回0)
@Test public void testCompareTo(){ BigDecimal decimal1=new BigDecimal("1.0"); BigDecimal decimal2=new BigDecimal("1.00"); Assert.assertFalse(decimal1.equals(decimal2)); Assert.assertTrue(decimal1.compareTo(decimal2)==0); Set<BigDecimal> hashSetContainer=new HashSet<BigDecimal>(); Set<BigDecimal> treeSetContainer=new TreeSet<BigDecimal>(); hashSetContainer.add(decimal1); hashSetContainer.add(decimal2); treeSetContainer.add(decimal1); treeSetContainer.add(decimal2); Assert.assertTrue(hashSetContainer.size()==2); Assert.assertTrue(treeSetContainer.size()==1); }
需要注意的地方:
1.对于2个正数int i,j。i为最大正整数,j为最小的负整数。在比较时,如果使用i-j,那么可能造成存储溢出并返回负数,从而导致比较结果不正确(因为i比j大,应返回正数)
2.推荐使用Apache Commons的CompareToBuilder实现比较逻辑
相关推荐
Comparable接口是定义在类内部的,例如,我们可以在Person类中实现Comparable接口,以便比较Person类的对象的大小。这样,Person类的对象就具有了比较大小的功能,可以随时随地的拿来比较大小。例如,我们可以使用...
通过简单的例子初步了解Comparable和Comparator的使用,注释很详细
主要介绍了java 实现Comparable接口排序,升序、降序、倒叙,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java通过Comparable接口实现字符串比较大小排序的简单实例
一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。” 参数: o - 要比较的对象。 返回: 负整数、零或正整数,根据此...
下面小编就为大家带来一篇java中实现Comparable接口实现自定义排序的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip
Java8HashMap键与Comparable接口编程开发技术共3页.pdf.zip
创建名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口。画出UML图并实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。
当且仅当要使用的对象实现Comparable接口时,我们也可以创建不带Comparator对象的SortedList。 用法 我们将像创建Java中的任何ArrayList一样创建SortedList: SortedList sortedlist = new SortedList(comparator); ...
实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。 此 接口只有一个方法...
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧
Java 中的自定义排序是指在编写 Java 程序时,通过实现 Comparable 接口来实现对对象的排序。在本节中,我们将通过一个实体类的示例来演示如何实现自定义排序。 自定义排序的必要性 在 Java 程序中,排序是非常...
北京市自学考试java上机实践考题总结,包含了常考的各种题型
本篇文章是对java比较器Comparable接口与Comaprator接口进行了详细的分析介绍,需要的朋友参考下
492.490.JAVA基础教程_常用类-自定义类实现Comparable自然排序(492).rar
总结一下: ArrayList:如果是查改多,用...一般是默认排序用自然排序(Comparable接口),特殊排序用定制排序(Comparetor接口实现) LinkedHashSet:如果需要元素不重复,并且,有存入和取出顺序要求用LinkedHashSet
计算机后端-Java-Java核心基础-第22章 常用类 22. 自定义类实现Comparable自然排序.avi
接口回调 用哥德巴赫猜想来总结,哥德巴赫猜想就是要去输入一个偶数,输出这个偶数能被分解为哪两个质数的和,具体实现...接口起到了两个作用,一是隔离,使用者和实现者中间有了接口来作为隔离,不必串行完成,可以并