关于HashSet遍历顺序,不是按照Hash算法求解所得顺序输出问题

Hash算法:

img

代码:

import java.util.HashSet;
import java.util.Set;

public class HashSetTest {
    public static void main(String[] args) {
        //实例化HashSet
        Set<Integer> set = new HashSet<>();
        //添加元素
        set.add(26);
        set.add(15);
        set.add(22);
        set.add(24);
        //获取元素
        for(Integer integer: set){
            System.out.println(integer);
        }
  }
}

输出结果:
22
24
26
15

请问输出结果为什么不是 Hash算法求得的顺序 22 15 24 26?

因为Set集合是无序的。
截图中的模9是题目给定的假设值,并不是真实的默认长度。
代码运行是测试不出效果的。只能通过给出的哈希长度来计算元素存放的位置。
Set集合的默认长度是16,应该是对16取模,而不是9

         //添加元素
        set.add(26);//26%16=10
        set.add(15);//15%16=15
        set.add(22);//22%16=6
        set.add(24);//24%16=8

对16取模后的大小排序是22 24 26 15
多添加几个元素试试,再加16、17,结果就是16 17 22 24 26 15

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

因为 HashSet 是基于散列表实现的,散列表是由链表数组实现,集合中的元素在插入散列表的时候是通过hash函数插入的,hash函数会把插入顺序打乱。因此,散列表迭代器在遍历链表数组的时候,访问到的是随机顺序的数据。


望采纳。