8

Java有一个Comparator<T>用于提供类本身外部对象的比较,以允许进行有序比较的多个/替代方法。

但是进行无序比较的唯一标准方法是equals() 类中覆盖。

当我想在类外部提供多个/交替的无序比较时,我应该怎么做?(明显的用例是根据特定属性将集合划分为等价类。)

假设最终用途是用于无序检查(例如,不用于排序或索引),是否可以实现Comparator<T>只检查是否相等,如果两个对象相等则返回 0,当两个对象不相等时返回值!= 0?(注意:我不跳上这个解决方案的唯一原因是,从技术上讲,它可以Comparator通过不提供满足传递性和对称性的关系来打破合同。)

似乎应该有一个EqualsComparator<T>标准类或其他东西。

(番石榴能处理这样的事情吗?)

4

1 回答 1

14

是的,Guava 有Equivalence接口和Equivalences类(在 Guava 版本 14.0 中删除)。

(是的,它在 Java非常有用,但遗憾的是缺乏。我们真的应该有围绕这个的选项HashMapHashSet等等......)

虽然在某些情况下Comparator<T> 可能没问题,但它没有提供对hashCode基于哈希的集合很重要的方法。

于 2011-08-31T15:10:52.423 回答