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

这个HashSet如何产生排序的输出?,第1张

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

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


此行为是由几个单独的原因引起的:

  • 整数对自己散列
  • 在Java中,
    HashMap
    s和
    HashSet
    s由数组备份
  • 它们还使用较高的位修改哈希,以修改较低的位;如果哈希值在0..15范围内,则不会被修改
  • 对象运行的存储桶取决于修改后的哈希的低位
  • 在地图或集合上进行迭代时,将依次扫描内部表

因此,如果您将一些小的(<16)整数添加到hashmap / hashset中,则会发生以下情况:

  • 整数
    i
    具有哈希码
    i
  • 因为它小于16,所以它的修改哈希也
    i
  • 它落在桶号。
    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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5478666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存