java - HashSet 是否在内部进行排序工作?

标签 java sorting hashset

我的 Set有时排序,有时不排序。

例子如下:

public class SetOfInteger {
    public static void main(String[] args) {
        Random rand = new Random(47);
        Set<Integer> intset = new HashSet<>();
        for (int i = 0; i < 10; i++) {
            int j = rand.nextInt(30);
            System.out.print(j + " ");
            intset.add(j);
        }
        System.out.println();
        System.out.println(intset);
    }
}

结果显示 set未排序。

8 5 13 11 1 29 28 20 12 7 
[1, 20, 5, 7, 8, 11, 12, 29, 28, 13]

当我将终止表达式更改为 i < 20 时在for语句中,结果显示set变得有序。

8 5 13 11 1 29 28 20 12 7 18 18 21 19 29 28 28 1 20 28 
[1, 5, 7, 8, 11, 12, 13, 19, 18, 21, 20, 29, 28]

这很奇怪,是吗?我只是不知道如何解释它,我需要一些帮助,非常感谢。

最佳答案

HashSet 不保证迭代排序,但在非常特殊的情况下,其内部数据结构可能类似于 bucket sort。 .

具体来说,对于[0,65535]范围内的整数键和大于最大键的表大小,存储键的桶的索引等于键本身,并且由于迭代器迭代按桶顺序,它按排序顺序发出元素。

关于java - HashSet 是否在内部进行排序工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36236316/

相关文章:

java - JOptionPane 尝试检索选择了哪个按钮

JavaScript 根据名称对 DOM 元素进行排序

java - HashSet 迭代器检查字母

java - 我可以简单地使用TreeSet对ArrayList的ArrayList进行排序吗?

java - 了解从 HashSet 生成的流中元素的顺序

java - 在 Swagger-UI 中对 API 方法进行排序

java - 如何使用反射获取注解类名、属性值

java - Mac 上的应用程序版本控制

Java 8 对多个对象进行排序

javascript - 对选择元素选项进行排序并保留焦点