Hash算法:
代码:
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
因为 HashSet 是基于散列表实现的,散列表是由链表数组实现,集合中的元素在插入散列表的时候是通过hash函数插入的,hash函数会把插入顺序打乱。因此,散列表迭代器在遍历链表数组的时候,访问到的是随机顺序的数据。
望采纳。