如果我实现自定义比较器,重写是否被认为是好的做法equals
除了compare
?
此外,是否有一份明确的合同Comparator
?
Comparator合约定义在它的javadoc中 http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html。尤其:
当使用能够施加与 equals 不一致的排序的比较器来对排序集(或排序映射)进行排序时,应小心谨慎。假设带有显式比较器 c 的排序集(或排序映射)与从集合 S 中提取的元素(或键)一起使用。如果 c 对 S 施加的排序与 equals 不一致,则排序集(或排序映射)将行为“奇怪”。特别是,排序集(或排序映射)将违反集合(或映射)的一般契约,该契约是根据 equals 定义的。
通常,如果 2 个对象相等equals
的角度,但不是从compareTo
从角度来看,您可以将这两个对象存储为 TreeMap 中的键。这可能会导致不直观的行为。也可以在特定情况下有目的地进行。
例如,这个答案 https://stackoverflow.com/a/12588005/829571显示一个示例,其中最好 equals 和 CompareTo 不一致.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)