给出了两个集合:如何在Java中有效地比较它们?
Lists,对它们进行排序和比较。(Comparable)Sets,并比较这些集合的hashCode?背景:
许多需要进行比较的集合都很小(通常每组<5个元素)。
发布于 2012-11-13 12:27:38
比较两组的正确方法是使用方法。除非您已经证明这是导致性能问题的代码的一部分(我对此表示怀疑),否则我不会担心性能问题。考虑到你的集合的大小(5个元素),这将是非常快的(可能是亚毫秒)。
将它们作为列表保存,对它们进行排序和比较。(可比)
肯定会慢一些,因为您需要复制元素,对它们进行排序和比较。
将它们作为集合并比较这些集合的哈希代码?
如果两个集合相等(具有相同的内容),它们将具有相同的哈希代码。交互不是真的:2组内容不同的集合可能有相同的哈希码。还请注意,例如,对于一个HashSet,哈希代码是通过迭代所有元素来计算的,因此它不是一个空闲操作。
发布于 2012-11-13 12:27:29
等于怎么了?docs声明,如果两者大小相同,如果containsAll()返回true,那么它将返回true,对我来说,这听起来非常有效。
在任何情况下,您都不应该比较哈希码来测试是否相等,两个不同的对象可能具有相同的哈希码。
更新:正如注释(以及assylias的答案)中所指出的,hashcode可以作为相等测试逻辑的一部分使用(不同的哈希代码意味着不同的对象,而不是相反的对象)。我上面的评论意味着仅仅使用hashcode是不够的(通常)。
发布于 2012-11-13 12:50:14
假设您想要进行比较,set1是否具有完全相同的set2元素。
set1.equals(set2)和set2.equals(set1),以确保两者完全相同。
https://stackoverflow.com/questions/13360675
复制相似问题