包含方法的Set Of Sets是否检查订单?

时间:2012-10-17 17:12:52

标签: java collections set

我担心的是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值只? (对不起,如果问题听起来很愚蠢。)

2 个答案:

答案 0 :(得分:2)

  

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

是的,比较两个Set时,订单会被忽略。这在Set#equals()的JavaDoc中说明:

  

将指定对象与此集进行比较以获得相等性。如果指定的对象也是一个集合,则返回true,两个集合具有相同的大小,并且指定集合的​​每个成员都包含在此集合中(或者等效地,此集合的每个成员都包含在指定的集合中)。此定义确保equals方法在set接口的不同实现中正常工作。

答案 1 :(得分:0)

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