2014-03-24 99 views
2

我想檢查兩個TreeMaps的所有密鑰是否相等。通過調用爲什麼java.util.TreeMap.KeySet沒有實現equals?

myTreeMap.navigableKeySet() 

我收到java.util.TreeMap.KeySet它實現NavigableSet,這反過來又延伸SortedSet。 因此,我認爲只有兩個KeySet不僅包含相同的元素(等於AbstractSet等於檢查),而且也以相同的順序時才被認爲是等於。我看不出這個限制是如何被KeySet類強制執行的。我錯過了什麼?

+1

@fge'KeySet'是'TreeMap'的包 - 私有靜態內部類。 – Thomas

+0

@Thomas好吧,我看到 – fge

+1

所有的套餐都有合同規定的義務,以任何順序「等於」任何其他的「套餐」,可導航,排序或不是。 –

回答

4

你不能做出保證。

雖然NavigableSet,其延伸SortedSet,保證元件將在由元件本身(如果它們實現Comparable)或者給定Comparator定義的順序,它不會覆蓋Set's contract for .equals()。而Set沒有訂購保證。

您可以有兩個SortedSet s具有相同的元素,但對於它們的比較是不同的,他們是相等的。

您可以檢查元素排序的唯一方法是將兩個組的元件啜到List S和檢查這些名單都是平等的 - 因爲Listdoes guarantee element order in its .equals() contract

注意,如果KeySet階級都覆蓋.equals()(因此.hashCode()以及)來檢查元素順序,將不再能夠假裝實施Set

相關問題