Kar*_*G C 1 java collections equals comparable
我有像Person这样的自定义类:
public class Person {
int age;
String name;
}
Run Code Online (Sandbox Code Playgroud)
现在我想Person基于类对对象进行排序age.
所以我将使用Comparable接口和实现compareTo()方法.
而且compareTo会有基于刚才比较人物对象的逻辑age.
所以,如果我这样做:
Collections.sort(list); // where list is a list of person
Run Code Online (Sandbox Code Playgroud)
我会基于的获得排序人名单age.
但我在某处读到,我们equals()在Comparable执行时也需要覆盖方法.
但我现在还没有看到它的使用.
任何人都可以解释一下,equals()如果我想sort基于age什么,还需要覆盖方法?
没有法律涉及Comparable.compareTo()和equals().但是我会说,如果compaeTo()返回0时equals()返回会令人困惑false.
我认为在你的情况下你应该使用自定义比较器而不是你的类Comparable.原因是今天你的比较标准是年龄,明天它将是人的名字,然后是姓氏,然后是权重......等等.这就是Comparator引入的原因以及应该使用它的用例.
从javadoc Comparable:
强烈建议(尽管不要求)自然排序[即由...定义的排序
Comparable.compareTo]与equals一致.这是因为没有显式比较器的有序集(和有序映射)在与自然顺序与equals不一致的元素(或键)一起使用时表现得"奇怪".特别是,这样的有序集(或有序映射)违反了集合(或映射)的一般契约,它是根据等于方法定义的.
"与equals一致"意味着compareTo当且仅当equals返回时返回0 true.因此,除非compareTo始终返回!= 0两个不同对象引用的值,否则equals应该重写.
| 归档时间: |
|
| 查看次数: |
1828 次 |
| 最近记录: |