显式比较器<T>和违反集合中 Equals 方法的一致性

问题描述 投票:0回答:1

建议在集合中使用用户自定义类时,当我们实现

Comparable<T>
接口时,接口的
compareTo(T arg)
方法要与
equals(Object obj)
方法保持一致。这意味着如果在比较两个对象时,compareTo 方法返回“0”,那么它们的 equals 方法应该返回“true”。

但是如果我们将显式

Comparator<T>
传递给集合会怎么样?

java collections
1个回答
0
投票

Comparator的文档推荐,但不要求,相同:

使用能够施加与 equals 不一致的排序的比较器来对排序集(或排序映射)进行排序时,应小心谨慎。假设带有显式比较器 c 的排序集(或排序映射)与从集合 S 中提取的元素(或键)一起使用。如果 c 对 S 施加的排序与 equals 不一致,则排序集(或排序映射)将行为“奇怪”。特别是,排序集(或排序映射)将违反集合(或映射)的一般契约,该契约是根据 equals 定义的。

© www.soinside.com 2019 - 2024. All rights reserved.