2012-12-11 7 views
7

Implementacja Java HashMap ma "następnego" członka w klasie prywatnej Entry. Ponieważ nowa wartość klucza zastąpi starą wartość, jakie jest użycie "następnego" członka w klasie Entry.Implementacja Java HashMap ma "następnego" członka w klasie Entry. Jaki jest jego pożytek?

static class Entry<K,V> implements Map.Entry<K,V> { 
     final K key; 
     V value; 
     Entry<K,V> next; 
     final int hash; 

     /** 
     * Creates new entry. 
     */ 
     Entry(int h, K k, V v, Entry<K,V> n) { 
      value = v; 
      next = n; 
      key = k; 
      hash = h; 
     } 
    ..... 

} 

Odpowiedz

7

next odnosi się do następnego wpisu w tym samym wiadrze.

Można mieć wiele wpisów w każdym segmencie - wiadro zawiera wszystkie pozycje z kodem hash równej pewnym i mod 2^n dla pewnego n, nie tylko wejścia do jednego konkretnego klucza.

+2

... ponieważ każdy zasobnik jest zaimplementowany jako lista powiązana – Bohemian

+1

Dzięki .. Rozumiem, że jest to implementacja listy powiązanej .. Ale jak możemy uzyskać wszystkie wartości z mapy. Dostajemy tylko ostatnią wstawioną jedną dla tego samego klucza. –

+0

Jest tylko jedna wartość na klucz. Stare wartości nie są pozostawione na mapie; to byłoby bezcelowe. Ale można uzyskać zbiór wartości (oczywiście jedną wartość na klucz) za pomocą 'HashMap.values ​​()'. –

2

Jeśli więcej niż jeden element hashuje do tego samego zasobnika, to wiadro musi zawierać wszystkie elementy, dlatego w wielu implementacjach stanie się zbiorem, na przykład listą.

0

Umożliwia łączenie wpisów.

+0

Może tak jest, ale może trochę informacji o tym, co masz na myśli, byłoby dobre ... –

Powiązane problemy