szedłem kodu źródłowego HashMap Java kiedy zobaczyłem następującąDlaczego HashMap wymaga, aby początkowa pojemność była potęgą dwóch?
//The default initial capacity - MUST be a power of two.
static final int DEFAULT_INITIAL_CAPACITY = 16;
Moje pytanie brzmi, dlaczego ten wymóg istnieje w pierwszej kolejności? Widzę również, że konstruktor, który pozwala na tworzenie HashMap o pojemności niestandardowego zamienia go na mocy dwóch:
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
Dlaczego pojemność zawsze musi być potęgą dwójki?
Co się dzieje, gdy wykonywane jest automatyczne ponowne zacieranie? Czy funkcja skrótu jest również zmieniona?
Dokładnie tego, czego szukałem, dziękuję. Jeszcze jedna wątpliwość, dlaczego tabela wpisów jest przejściowa, nawet jeśli przechowuje wszystkie dane? – Sushant
@ Sushant: Dane w tabeli są * jawnie * serializowane w obiekcie writeObject (tak, że wszystkie puste wpisy nie są zapisywane). Ustanowienie przejściowego pola zatrzymuje normalny kod serializacji od * również * wypisywanie go w wywołaniu 'defaultWriteObject'. –
@JonSkeet jak działa h i (długość-1) z negatywami? powiedzmy length = 16 and h = -7 – Geek