gpt4 book ai didi

java - 这个 HashSet 如何产生排序后的输出?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:49 25 4
gpt4 key购买 nike

即使哈希集未排序,以下代码也会生成输出 [1,2]

Set set = new HashSet();
set.add(new Integer(2));
set.add(new Integer(1));
System.out.println(set);

这是为什么?

最佳答案

编辑:从 Java 8 及更高版本开始,以下内容不再适用。这证明您不应该依赖未记录的 Java 行为。


此行为是由几个不同的原因引起的:

  • 整数散列到自己
  • 在 Java 中,HashMapHashSet 由数组备份
  • 他们还使用高位来修改低位来修改散列;如果散列在 0..15 范围内,则不会被修改
  • 对象进入哪个桶取决于修改后的散列的低位
  • 在遍历 map 或 set 时,会依次扫描内表

因此,如果您将几个小的 (<16) 整数添加到散列图/散列集,则会发生以下情况:

  • 整数 i 有哈希码 i
  • 因为小于16,所以修改后的hash也是i
  • 它落在桶号。
  • 迭代时,桶是按顺序访问的,所以如果你存储的都是小整数,它们将按升序检索

请注意,如果桶的初始数量太少,整数可能会落在没有编号的桶中:

HashSet<Integer> set = new HashSet<>(4);
set.add(5); set.add(3); set.add(1);
for(int i : set) {
System.out.print(i);
}

打印153

关于java - 这个 HashSet 如何产生排序后的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648521/

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