3

我担心的是 Set of Sets (HashSet s) 是否也检查项目的顺序。我编写了一个应用程序来检查给定的整数集是否存在于整数集

昨天在一台计算机上不知何故我注意到什么 Set of Integers 是无序的(关于 HashSets 有什么可以的)但我担心并写了一些简单的 main 来检查它:

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]
:)

所以我的问题是如何比较集合?仅卜值?(对不起,如果这个问题听起来很愚蠢。)

4

2 回答 2

2

所以我的问题是如何比较集合?仅卜值?

是的,比较两个Sets 时会忽略顺序。这在 JavaDoc 中有说明Set#equals()

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

于 2012-10-17T17:14:13.683 回答
0

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

于 2012-10-17T17:16:17.833 回答