我担心的是Set Set(HashSet)是否也会检查项目的顺序。 我编写了一个应用程序,用于检查整数集合中是否存在给定的整数集
昨天在一台计算机上我注意到什么是整数集是无序的(HashSets什么都没关系)但我担心并写了一些简单的主要用于检查它:
public static void main(String[] args) {
Set<Set<Integer>> set1 = new HashSet<Set<Integer>>();
Set<Integer> set2 = new HashSet<Integer>();
Set<Integer> set3 = new HashSet<Integer>();
set3.add(14); set3.add(2); set3.add(9); set3.add(3); set3.add(5);
set1.add(set3);
set3 = new HashSet<Integer>();
set3.add(6); set3.add(7); set3.add(8); set3.add(9); set3.add(10);
set1.add(set3);
set2.add(9); set2.add(14); set2.add(5); set2.add(2); set2.add(3);
System.out.println(set1);
System.out.println(set2);
if(set1.contains(set2)){
System.out.println(":)");
}else
System.out.println(":(");
}
事情是我在这台机器上看到了HashSet的订购。输出是:
[[2, 3, 5, 9, 14], [6, 7, 8, 9, 10]]
[2, 3, 5, 9, 14]
:)
所以我的问题是如何比较? Bu值只? (对不起,如果问题听起来很愚蠢。)
答案 0 :(得分:2)
所以我的问题是如何比较? Bu值只?
是的,比较两个Set
时,订单会被忽略。这在Set#equals()
的JavaDoc中说明:
将指定对象与此集进行比较以获得相等性。如果指定的对象也是一个集合,则返回true,两个集合具有相同的大小,并且指定集合的每个成员都包含在此集合中(或者等效地,此集合的每个成员都包含在指定的集合中)。此定义确保equals方法在set接口的不同实现中正常工作。
答案 1 :(得分:0)
HashSet
并不保证订单会随着时间的推移保持不变。它实际上是由哈希表支持的。其中内部维护存储数据的存储桶,并使用hashing algorithm
生成存储桶的哈希索引。一旦插入大量数据集,您可能会看到顺序可能不一样。并且它调用equals方法来检查两个Object之间的相等性。