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

时间:2011-08-31 15:09:07

标签: java guava equivalence-classes

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

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

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

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

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

(Guava会处理这样的事吗?)

1 个答案:

答案 0 :(得分:14)

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

(是的,这是 非常有用且遗憾地缺乏Java的东西。我们真的应该为HashMapHashSet等提供选择......

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