2014-03-24 56 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

相关问题