Ниже приведен код для проверки поведения hashmap, когда все элементы заканчиваются в одном сегменте: -
public class DerivedMain {
int data = 10;
@Override
public int hashCode() {
return data;
}
public static void main(String[] args) {
HashMap m = new HashMap();
for(int i=0;i<20;i++) {
m.put(i, i);
}
Field tableField = null;
try {
tableField = HashMap.class.getDeclaredField("table");
} catch (NoSuchFieldException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tableField.setAccessible(true);
Object[] table = null;
try {
table = (Object[]) tableField.get(m);
} catch (IllegalArgumentException | IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(table == null ? 0 : table.length);
}
}
Я получил следующий вывод: -
32
Почему происходит изменение размера, даже если все элементы заканчиваются в одном сегменте?