Set set = new HashSet();
set.add("2");
set.add(3);
set.add("1");
System.out.println(set);
上面代码的输出结果为{2,1,3},请问为何会得出这样的顺序。当第三行的set.add(3)改成set.add("3")时,结果变为{3,2,1},请问为何会如此,新人一枚,麻烦稍微讲清楚一点,谢谢。
------解决思路----------------------
HashSet里面其实是Map值存储的,map里面是Entry的数组,开始的Entry的初始长度是16,每次put的时候,他的下标是根据Hash值跟Entry数组长度的二进制相与得到,所以他存储的下标不是按这0,1,2的顺序来存储的,可能第一次她存储的下标就是4,所以他存储肯定不是顺序的,3和"3"的hash不相等,则存入的下标也不一样所以顺序不一样很正常
------解决思路----------------------
HashSet集合中有个hashCode方法,该方法是根据你存放数据的地址值的不同早通过哈希算法生成的值,小的值就放在前面,大的值就放在后面,因此你放的三个值在内存中的地址不同排序就不同