【问题标题】:Sorting in HashSet [duplicate]在HashSet中排序[重复]
【发布时间】:2014-02-14 00:33:51
【问题描述】:

我读到java.util.HashSet 没有排序。但是,当我执行此代码时

import java.util.*; 

public class Example {  
    public static void main(String[] args) { 
        Set set = new HashSet();  
        set.add(newInteger(5));  
        set.add(new Integer(2)); 
        set.add(new Integer(1)); 

        System.out.println(set);
    }
}

输出是

[1, 2, 5]

为什么要对值进行排序?

【问题讨论】:

  • 它按哈希码 mod 一些数字排序
  • Java 有一个名为 javadoc 的文档功能。阅读HashSet的javadoc。
  • ...它碰巧按数字顺序出现。
  • 您的样本量非常小。尝试你的套装中的许多物品。另外,尝试使用字符串而不是整数。行为将变得明显。

标签: java collections


【解决方案1】:

不能保证它会一直井井有条。正如在 cmets 中已经说明的那样,它只是偶然发生,在这种情况下确实如此,如果您有兴趣,为什么要查看 Javadoc。

本质上,它使用哈希函数(您可能已经猜到 HashSet)将值映射到特定的“桶”或内存中的位置以便快速查找(即检查集成员资格等)。一个简单的例子是它取值mod 某个数字(即“桶”的数量)来确定哪个“桶”来存储在您的情况下最有可能大于您添加的整数的值的值,因此它们是按顺序排列的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多