看代码会输出什么?
public static void main(String[] args) {
HashSet<Integer> set =new HashSet<>();
set.add(8);
set.add(1);
set.add(2);
set.add(2);
System.out.println(set);
set.remove(2);
System.out.println(set);
}
输出:
[1, 2, 8]
[1, 8]
竟然是有序的(没有按插入顺序输出!)
原因:
JDK8版java.util.HashMap内的hash算法混淆程度低;在[0, 2^32-1]范围内经过HashMap.hash()之后还是得到自己。我的例子正好落入这个范围内。
也就是后插入1 实际hash之后会排在8之前的