Java:用于确定等价的外部类?

Jas*_*n S 8 java equivalence-classes guava

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

但是,进行无序比较的唯一标准方法是equals() 类中重写.

当我想在课堂外提供多个/备用无序比较时,我该怎么办?(明显的用例是根据特定属性将集合划分为等价类.)

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

似乎应该有一个EqualsComparator<T>标准的类或什么的.

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

Jon*_*eet 14

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

(是的,这非常有用的,而且在Java中很缺乏.我们真的应该有这方面的选择HashMap,HashSet等等......)

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

  • 我可以保证它不会消失,但它是不断变化的.例如,对于即将发布的版本10.0,我们已将其更改为抽象类,并将大部分等效项直接移入其中(并且可能在某个时候完成工作). (5认同)