我想检查两个TreeMaps的所有键是否相等。致电
myTreeMap.navigableKeySet()
我收到了java.util.TreeMap.KeySet
,其中NavigableSet
实施了SortedSet
,而这又延伸了AbstractSet
。
因此,如果两个KeySet不仅包含相同的元素(由KeySet
的等号检查),而也以相同的顺序,则我认为这两个KeySet仅被视为等于。我无法看到类{{1}}如何强制执行此限制。我错过了什么?
答案 0 :(得分:4)
你不能保证。
虽然扩展NavigableSet
的{{1}}保证元素将按照元素本身(如果它们实现SortedSet
)或给定Comparable
定义的顺序,它不会覆盖Set
's contract for .equals()
。 Comparator
没有订购保证。
你可以有两个具有相同元素的Set
,但是对于它们的比较不同,它们将相等。
检查元素排序的唯一方法是将两个元素的元素都粘贴到SortedSet
中并检查这些列表是否相等 - 因为List
does guarantee element order in its .equals()
contract。
请注意,如果List
类确实覆盖KeySet
(因此也.equals()
)以检查元素顺序,则它将无法再假装实现{{1 }}!