2016-07-07 44 views
5

Mój przyjaciel pytał mnie dzisiaj o pytanie dotyczące wywiadu.Czy w hasmapie można uniknąć ponownego klejenia?

Czy istnieje sposób na uniknięcie/uniknięcie Hashmap? Wywiad dał wskazówkę, że istnieje haczyk dzięki któremu hashuje można uniknąć

Próbowałem patrząc na kod HashMap i wygląda tak szybko, jak to uderza współczynnik obciążenia to rehashes

Ustawianie współczynnika ładunku na wyższa wartość może tylko opóźnić proces hashuje

jestem pomylony jeśli to w ogóle możliwe, aby zapobiec jego hashuje

Jeśli ktoś może wskazać mi w dobrym kierunku, to może pomóc

+0

Czy początkowa pojemność jest większa niż maksymalna liczba elementów, które będą przechowywane podzielona przez współczynnik obciążenia? – immibis

+0

Tak, przez dostrojenie współczynnika obciążenia. I tak, można tylko całkowicie uniknąć, jeśli wiesz, ile elementów zostanie dodanych. –

+6

Sigh ... inny analityk, który chce sprawdzić, czy potencjalni klienci zapamiętali źródło środowiska wykonawczego Java ... Po prostu nie widzę, o co chodzi z zadawaniem takich pytań. – ajb

Odpowiedz

5

Tak, to może być av oided, jeśli znasz wcześniej wielkość swojej mieszańca.

Zestaw loadFactor = 1 (domyślnie wynosi 0,75)

initialCapacity = size of hashmap + 1 (domyślnie wynosi 16).

Poniższa konstruktora instancji swojemu HashMap

public HashMap(int initialCapacity, float loadFactor) 

To będzie działać, ponieważ w poniższym fragmencie kodu z klasy HashMap, warunek (size >= threshold) nigdy nie będą zadowoleni, więc hashtable nigdy nie jest zmieniany.

void addEntry(int paramInt1, K paramK, V paramV, int paramInt2) 
{ 
    if ((size >= threshold) && (null != table[paramInt2])) 
    { 
     resize(2 * table.length); 
     paramInt1 = null != paramK ? hash(paramK) : 0; 
     paramInt2 = indexFor(paramInt1, table.length); 
    } 
    createEntry(paramInt1, paramK, paramV, paramInt2); 
}