声明:只是做测试结果,无源码分析!
//测试set无序
@Test
public void testHashSet() throws Exception {
Set<String> set = new HashSet<>();
set.add("1");
set.add("3");
set.add("5");
set.add("7");
set.add("9");
set.add("2");
set.add("4");
set.add("6");
set.add("8");
System.out.println("输出set集合-->"+set);
//lambda 表达式的语法格式 Java8新特性
set.forEach(test -> {
System.err.println(test);
});
}
输出set集合–>[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
2
3
4
5
6
7
8
9
//测试set无序
@Test
public void testHashSet() throws Exception {
Set<String> set = new HashSet<>();
set.add("1111");
set.add("1");
set.add("3");
set.add("5");
set.add("6");
set.add("8");
set.add("111");
System.out.println("输出set集合-->"+set);
//lambda 表达式的语法格式 Java8新特性
set.forEach(test -> {
System.err.println(test);
});
}
输出set集合–>[1, 111, 3, 5, 6, 1111, 8]
1
111
3
5
6
1111
8
总结:
1)当输入的值大小和底层数组大小差不多的时候,HashSet的输入顺序是无序的,但输出是有序的,因为这些数的哈希值,在底层是顺序拍的,故输出也是有序的。
2)而当输入的值大小和底层数组相差很大时,大的数的哈希值有可能是小于比他小的数的,这时候输出的结果就是无序的。