Согласно приведенному ниже коду, начальная емкость по умолчанию для hashmap равна 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 внутри, так какой обход он использует здесь в этом случае?