大家都知道,哈希表中存放数据是没有排序的,但是我在做一个题时,发现了在一定条件下,他会自动排序
题目:获取10个不重复的1至20之间的随机数(用HashSet创建集合)
public class Demo {
public static void main(String[] args) {
// 获取随机数
Random r = new Random();
// 创建集合对象
HashSet<Integer> set = new HashSet<>();
// 生成随机数
while (set.size() < 10) {
set.add(r.nextInt(20) + 1);
}
// 遍历集合
for (int integer : set) {
System.out.println(integer);
}
}
}
运行结果:
输出为无序随机排列的。
获取11个和12个时结果一样也是随机的,但当我获取13个时出现了问题,运行结果如下:
他会自动排序输出,为了弄明白什么情况,我进行的调试,代码更改如下
public class Demo {
public static void main(String[] args) {
// 获取随机数
Random r = new Random();
// 创建集合对象
HashSet<Integer> set = new HashSet<>();
// 生成随机数
while (set.size() < 13) {
System.out.println(set.size());
set.add(r.nextInt(20) + 1);
System.out.println(set);
}
// 遍历集合
for (int integer : set) {
System.out.println(integer);
}
}
}
运行结果如下:
我把每次集合中的元素进行了遍历,可以看出排序是在最后一次进行的,我又进行了几次实验,出现排序都是最后一次进行排序的。
我个人认为比较合理的解释是JDK8版本出现了更新所导致的。