Java doc says-Wenn die Anzahl der Einträge in der Hash-Tabelle das Produkt des Ladefaktors und die aktuellen Kapazität übersteigt, wird die Hash-Tabelle rehashedHashMap Kapazität nicht einmal erhöht auf Schwelle erreicht
Im folgende Programm -
HashMap<Integer, String> map = new HashMap<Integer, String>();
int i = 1;
while(i<16) {
map.put(i, new Integer(i).toString());
i++;
}
Key ist vom Typ Integer bei Einfügung 13. bis 15. Element HashMap Kapazität bleibt, wie 16 und Schwelle bleibt gleich wie 12, warum?
Debug Screenshot nach in der Karte 13.es Element hinzugefügt wird -
args String[0] (id=16)
map HashMap<K,V> (id=19)
entrySet null
hashSeed 0
KeySet null
loadFactor 0.75
modCount 13
size 13
table HashMap$Entry<K,V>[16] (id=25)
threshold 12
values null
i 14
[null, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 9=9, 10=10, 11=11, 12=12, 13=13, null, null]
HashMap mit Schlüsseln vom Typ String - HashMap<String, String>
oder einem benutzerdefinierten Klasse - Map<Employee,Integer>
Show erwarteten Verhalten bei 13.er Insertion
Lesen Sie den Code. Das wird es erklären. Es ist möglich, dass sich bei der Implementierung etwas geändert hat, was bedeutet, dass das Javadoc nicht mehr * genau * korrekt ist. Aber das ist nicht interessant (IMO), weil kein vernünftiger Programmierer jemals auf das genaue Verhalten der hashmap-Größenänderung angewiesen wäre. –
Nur zu versuchen, herauszufinden, warum das Implementierungsverhalten für Keys als Integer anders ist. Wenn ich HashMap versuche, ändert es die Größe der Map bei der 13. Einfügung. –
anmolmore
Welche Java-Version (einschließlich Update)? – m3th0dman