【问题标题】:Does Set Of Sets on contain method checks the order?包含方法上的 Set Of Sets 是否检查订单?
【发布时间】:2012-10-17 17:12:51
【问题描述】:

我担心的是 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]
:)

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

【问题讨论】:

    标签: java collections set


    【解决方案1】:

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

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

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

    【讨论】:

    • @Alexey:不要忘记为有帮助的答案投票,并接受您认为最能回答您的问题的答案(如果有的话)。
    • 我试过了,但是:投票需要 15 声望(点击此框关闭):(
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 2021-10-30
      • 2018-07-02
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      相关资源
      最近更新 更多