2012-10-17 73 views
3

我的担心是如果集合集合(HashSet s)也检查项目的顺序。 我写了检查,如果整数的一组给定的设置中存在整数集Set包含的方法是否检查命令?

不知怎的,一台计算机上昨天我注意到什么整数集是无序的(什么是关于HashSets OK)的应用程序,但我担心,写一些简单的主要检查它:

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值只? (对不起,如果这个问题听起来很蠢)。

回答

2

所以我的问题是如何设置比较? Bu值只?

是的,当比较两个Set时忽略该顺序。这是在JavaDoc规定为Set#equals()

比较指定对象与此set的相等。如果指定的对象也是一个集合,则两个集合具有相同的大小,并且指定集合中的每个成员都包含在此集合中(或等价地,此集合中的每个成员都包含在指定集合中),则返回true。该定义确保equals方法在设置接口的不同实现之间正常工作。

+0

明白了。谢谢! – Alexey

+0

@Alexey:不要忘记提供有用的答案,并接受你最好回答你问题的答案(如果有的话)。 – Keppil

+0

我试着去做它但是: Vote Up需要15声望 (点击这个盒子解雇) :( – Alexey

0

HashSet并不保证订单会随时间保持不变。它实际上是由一个哈希表支持的。内部维护桶存储数据,并使用hashing algorithm生成桶的哈希索引。一旦插入大量的数据集,您可以看到订单可能不一样。它调用equals方法来检查两个Object之间的等式。