建议在集合中使用用户自定义类时,当我们实现
Comparable<T>
接口时,接口的compareTo(T arg)
方法要与equals(Object obj)
方法保持一致。这意味着如果在比较两个对象时,compareTo 方法返回“0”,那么它们的 equals 方法应该返回“true”。
但是如果我们将显式
Comparator<T>
传递给集合会怎么样?
Comparator的文档推荐,但不要求,相同:
使用能够施加与 equals 不一致的排序的比较器来对排序集(或排序映射)进行排序时,应小心谨慎。假设带有显式比较器 c 的排序集(或排序映射)与从集合 S 中提取的元素(或键)一起使用。如果 c 对 S 施加的排序与 equals 不一致,则排序集(或排序映射)将行为“奇怪”。特别是,排序集(或排序映射)将违反集合(或映射)的一般契约,该契约是根据 equals 定义的。