Nic*_*ner 134 java comparable comparator
我见过同时实现Comparable和Comparator的类.这是什么意思?为什么我会使用一个而不是另一个?
Dan*_*Dan 236
以下文字来自Comparator vs Comparable
可比
可比较的对象能够将自己与另一个对象进行比较.类本身必须实现java.lang.Comparable接口才能比较其实例.
比较
比较器对象能够比较两个不同的对象.该类不是比较它的实例,而是比较其他类的实例.该比较器类必须实现该java.util.Comparator接口.
Jon*_*eet 148
实现Comparable意味着"我可以将自己与另一个对象进行比较." 当存在单个自然默认比较时,这通常很有用.
实现Comparator意味着"我可以比较其他两个对象".当有多种方法比较两种类型的实例时,这通常很有用 - 例如,您可以按年龄,姓名等比较人.
KLE*_*KLE 36
Comparable让一个类实现自己的比较:
相比之下,Comparator是一个外部比较:
在这两种实现中,您仍然可以选择要比较的内容.使用泛型,您可以声明,并在编译时检查它.这提高了安全性,但确定适当的值也是一个挑战.
作为指导,我通常使用可以比较该对象的最通用的类或接口,在我设想的所有用例中......虽然定义不是很精确!:-(
Comparable<Object>允许你在编译时在所有代码中使用它(如果需要可以使用它,如果没有则可以使用,如果没有,则会丢失编译时错误); 您的实现必须处理对象,并根据需要进行强制转换.Comparable<Itself> 相反是非常严格的.有趣的是,当你将它自己子类化为Subclass时,Subclass也必须是Comparable并且对它是健壮的(或者它会破坏Liskov Principle,并给你运行时错误).
cod*_*hki 20
java.lang.Comparable的
要实现Comparable接口,类必须实现单个方法compareTo()
int a.compareTo(b)
您必须修改要对其实例进行排序的类.这样每个类只能创建一个排序序列.
的java.util.Comparator
要实现Comparator接口,类必须实现单个方法 compare()
int compare (a,b)
Comparable通常是首选.但有时一个类已经实现了Comparable,但是你想要对不同的属性进行排序.然后你被迫使用了Comparator.
有些班级实际上提供Comparators了常见案例; 例如,Strings在排序时默认区分大小写,但也有一个静态Comparator调用CASE_INSENSITIVE_ORDER.
小智 6
以下是我在网上找到的Comparator和Comparable之间的一些差异:
如果你看到这两者之间的逻辑差异是Java中的Comparator比较提供给他的两个对象,而Comparable接口将"this"引用与指定的对象进行比较.
Java中的可比较用于实现对象的自然排序.在Java API String中,Date和包装类实现Comparable接口.
如果任何类在Java中实现Comparable接口,那么可以使用Collections.sort()或Array.sort()方法自动对List或Array的集合进行排序,并且将根据CompareTo方法定义的自然顺序对对象进行排序.
在Java中实现Comparable的对象可以用作有序映射中的键或有序集合中的元素(例如TreeSet),而无需指定任何Comparator.
site:如何在Java中使用Comparator和Comparable?用例子
阅读更多:如何在Java中使用Comparator和Comparable?用例子
| 归档时间: |
|
| 查看次数: |
217431 次 |
| 最近记录: |