为什么java.util.TreeMap.KeySet没有实现equals?

时间:2014-03-24 18:41:16

标签: java collections treemap

我想检查两个TreeMaps的所有键是否相等。致电

myTreeMap.navigableKeySet()

我收到了java.util.TreeMap.KeySet,其中NavigableSet实施了SortedSet,而这又延伸了AbstractSet。 因此,如果两个KeySet不仅包含相同的元素(由KeySet的等号检查),而也以相同的顺序,则我认为这两个KeySet仅被视为等于。我无法看到类{{1}}如何强制执行此限制。我错过了什么?

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 }}!