Java doc says - Gdy liczba wpisów w tabeli hash przekracza iloczyn współczynnika obciążenia i wydajności prądowej, tabela mieszania jest rehashedHashMap pojemność nie wzrosła nawet po osiągnięciu progu
W poniższym programie -
HashMap<Integer, String> map = new HashMap<Integer, String>();
int i = 1;
while(i<16) {
map.put(i, new Integer(i).toString());
i++;
}
klucz jest typu Integer, przy włożeniu 13 do 15 pojemności elementem HashMap pozostaje 16 i próg pozostaje taka sama jak 12, dlaczego?
Debug ekranu po dodaniu 13th element mapie -
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 z kluczem typu String - HashMap<String, String>
lub niestandardowej klasy - Map<Employee,Integer>
pokaz oczekiwanego zachowania na 13 wkładania
Przeczytaj kod. To to wytłumaczy. Możliwe, że coś się zmieniło w implementacji, co oznacza, że javadoc nie jest już * dokładnie * poprawny. Ale to nie jest interesujące (IMO), ponieważ żaden rozsądny programista nigdy nie będzie zależał od dokładnego zachowania zmiany rozmiaru mapy. –
Po prostu próbuję znaleźć powód, dla którego zachowanie implementacji jest inne dla posiadania kluczy jako Integer. Jeśli wypróbuję program HashMap, zmieni on rozmiar mapy na 13. wstawienie –
anmolmore
Która wersja Java (w tym aktualizacja)? – m3th0dman