2011-08-31 28 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,我們已將其更改爲抽象類,並將大部分等效項直接移入其中(並且可能會在某個時間點完成該作業)。 –