gpt4 book ai didi

java - 为什么打印时此HashSet看起来已排序?

转载 作者:行者123 更新时间:2023-12-03 11:17:48 25 4
gpt4 key购买 nike

Set<Integer> s = new HashSet<Integer>();
s.add(77);
s.add(0);
s.add(1);

System.out.println(s);

TreeSet<Integer> s1 = new TreeSet<Integer>();
s1.add(77);
s1.add(0);
s1.add(1);

System.out.println(s1);
输出:
s = [0, 1, 77]
s1= [0, 1, 77]
通过定义在教程的指向页面上

A Set is a generic set of values with no duplicate elements. A TreeSet is a set where the elements are sorted.


为什么对 ss1的输出都进行排序?我期望只对 s1的输出进行排序。

最佳答案

这只是偶然发生的。HashSetsHashMap的特殊实现,但它们仍使用hashCode将对象放置在存储桶中。hashCode的标准Integerint值本身。
指定如此低的值,再加上负载因子和存储桶算法,会根据该代码将它们放置在不同的存储桶中,但是这些存储桶恰好是顺序的。如果您将值更改为更大的值,则它们将不会被排序,因为该算法仅使用hashCode的一部分来选择存储区,因此可以降低它们被顺序执行的机会。对于大得多的随机分布数集,情况也是如此。

Set<Integer> s = new HashSet<Integer>();

s.add(57999999);
s.add(67999999);
s.add(77999999);

System.out.println(s);

TreeSet<Integer> s1 = new TreeSet<Integer>();

s1.add(57999999);
s1.add(67999999);
s1.add(77999999);


System.out.println(s1);
在运行Windows和Java 14的计算机上,它们的打印如下:
[67999999, 77999999, 57999999]
[57999999, 67999999, 77999999]

关于java - 为什么打印时此HashSet看起来已排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64307466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com