对于 java 中的 Hashset,有一个 .equals 方法比较每个集合中的元素。无论顺序如何,这都会返回 true 吗?
例如,假设我们有一个包含元素 {a,b,c} 的集合和另一个包含元素 {b,c,a} 的集合
如果你在这两个集合上使用 .equals ,它会返回 true,还是必须排序?
这应该返回 true。文档说:
比较指定对象与此集合是否相等。如果给定对象也是一个集合,则返回 true,这两个集合具有相同的大小,并且给定集合的每个成员都包含在该集合中。这确保了 equals 方法在 Set 接口的不同实现中正常工作。
JavaHashSet
是无序的——它们没有排序。因此,您的问题根本无法按提出的方式提出。集合{a,b,c}
与集合相同{b,c,a}
。也就是说,HashSet
inherit'sAbstractSet#equals(Object)
告诉我们以下内容:
比较指定对象与此集合是否相等。返回
true
给定对象是否也是一个集合,这两个集合具有相同的大小,并且给定集合的每个成员都包含在这个集合中。这可确保该方法在接口equals
的不同实现中正常工作。Set
HashSet
实现Set
接口(建模数学集合抽象),它不包含顺序信息,因此排序在集合中没有意义。结果,equals
in aSet
只考虑成员而无视成员的命令。
是的,这将是真的,因为 Set 没有隐含的顺序。
您可以通过添加比较器或使用 Set 的特殊情况(例如 TreeSet)将顺序应用于集合。
顺便说一下,哈希码用于在 Set 中进行快速比较。根据 equals 合约,任何两个被认为“相等”的对象必须具有相同的哈希码。
这意味着在不太可能发生哈希码冲突的情况下,Set 只需回退到更耗时的方法。
哈希本质上是一个无序列表,所以是的,
如果哈希 A 包含 {1,2,3,4,5},哈希 B 包含 {3,1,5,4,2},那么它们将相等。