Java8 哈希映射在返回常量哈希码的情况下重新哈希处理
根据下面的代码,哈希映射的初始dafault容量为16,LF为0.75,因此当我输入第13个元素时,应该进行重新哈希处理,并且由于我提供了一个恒定的哈希码,因此它在内部维护一个链接列表以维护插入顺序。因此,直到第10个元素,它都按预期工作,但是当我输入第11个元素时,它会随机排列顺序。任何人都可以帮助我理解为什么它只发生在第11个元素插入的时候。
class A{
int a;
A(int a){
this.a = a;
}
@Override
public int hashCode() {
return 7;
}
@Override
public String toString() {
return "" + a + "";
}
}
class Base {
public static void main(String[] args) {
Map<Object, Integer> m = new HashMap<Object, Integer>();
m.put(new A(1), 1);
m.put(new A(2), 1);
m.put(new A(3), 1);
m.put(new A(4), 1);
m.put(new A(5), 1);
m.put(new A(6), 1);
m.put(new A(7), 1);
m.put(new A(8), 1);
m.put(new A(9), 1);
m.put(new A(10), 1);
//m.put(new A(11), 1);
System.out.println(m);
}
}
我得到的输出直到第10个元素:
{1=1, 2=1, 3=1, 4=1, 5=1, 6=1, 7=1, 8=1, 9=1, 10=1}
输入第11个元素后获得的输出:
{4=1, 1=1, 2=1, 3=1, 5=1, 6=1, 7=1, 8=1, 9=1, 10=1, 11=1}
它应该保持插入顺序,或者如果它在内部使用RB树,那么在这种情况下,它在这里使用哪种遍历?