2011-08-31 30 views
7

Java有用于提供外部类本身的对象比较,以允许这样做有序比较的多个/备用方法Comparator<T>Java:确定等价的外部类?

但这样做无序比较的唯一标准方法是内类覆盖equals()

我应该怎么做时,我想提供外部的一类多/备用无序的比较?(明显的用途而言,根据特定的属性划分的集合到等价类。)

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

好像有应该是一个EqualsComparator<T>标准类或什么的。

(番石榴是否处理这样的事?)

回答

13

是,番石榴具有Equivalence接口和Equivalences类(番石榴删除释放14.0)。

(是的,它的东西,这是非常有用的,在Java中极为缺乏。我们确实应该有选择的解决此为HashMapHashSet等)

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

+0

嗯...都被标记@Beta虽然。 –

+0

@Jason:所以要谨慎使用:)(最终'Equivalence'是一个接口,所以它不喜欢你依赖于一个*实施*可能消失) –

+5

我可以保证它不会消失,但它在不断变化。例如,对于即将到来的版本10.0,我们已将其更改为抽象类,并将大部分等效项直接移入其中(并且可能会在某个时间点完成该作业)。 –