首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地比较集合?

如何有效地比较集合?
EN

Stack Overflow用户
提问于 2012-11-13 12:21:58
回答 3查看 21.4K关注 0票数 4

给出了两个集合:如何在Java中有效地比较它们?

  • (a)将它们保持为Lists,对它们进行排序和比较。(Comparable)
  • (b)将它们保持为Sets,并比较这些集合的hashCode

背景:

许多需要进行比较的集合都很小(通常每组<5个元素)。

EN

回答 3

Stack Overflow用户

发布于 2012-11-13 12:27:38

比较两组的正确方法是使用方法。除非您已经证明这是导致性能问题的代码的一部分(我对此表示怀疑),否则我不会担心性能问题。考虑到你的集合的大小(5个元素),这将是非常快的(可能是亚毫秒)。

将它们作为列表保存,对它们进行排序和比较。(可比)

肯定会慢一些,因为您需要复制元素,对它们进行排序和比较。

将它们作为集合并比较这些集合的哈希代码?

如果两个集合相等(具有相同的内容),它们将具有相同的哈希代码。交互不是真的:2组内容不同的集合可能有相同的哈希码。还请注意,例如,对于一个HashSet,哈希代码是通过迭代所有元素来计算的,因此它不是一个空闲操作。

票数 9
EN

Stack Overflow用户

发布于 2012-11-13 12:27:29

等于怎么了?docs声明,如果两者大小相同,如果containsAll()返回true,那么它将返回true,对我来说,这听起来非常有效。

在任何情况下,您都不应该比较哈希码来测试是否相等,两个不同的对象可能具有相同的哈希码。

更新:正如注释(以及assylias的答案)中所指出的,hashcode可以作为相等测试逻辑的一部分使用(不同的哈希代码意味着不同的对象,而不是相反的对象)。我上面的评论意味着仅仅使用hashcode是不够的(通常)。

票数 2
EN

Stack Overflow用户

发布于 2012-11-13 12:50:14

假设您想要进行比较,set1是否具有完全相同的set2元素。

set1.equals(set2)set2.equals(set1),以确保两者完全相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13360675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档