2012-12-11 2 views
7

Die Java HashMap-Implementierung hat ein 'next'-Mitglied in der Entry-Klasse. Da ein neuer Wert für einen Schlüssel den alten Wert überschreibt, wird der 'nächste' Member in der Entry-Klasse verwendet.Die Java HashMap-Implementierung hat das 'next'-Member in der Entry-Klasse. Was nützt es?

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; 
     } 
    ..... 

} 

Antwort

7

next bezieht sich auf den nächsten Eintrag in dem gleichen Eimer.

können Sie haben mehrere Einträge in jedem Eimer - ein Eimer enthält alle die Einträge mit Hash-Code gleich einem i mod 2^n für einige n, nicht nur der Eintrag für einen bestimmten Schlüssel.

+2

... weil jeder Bucket als verkettete Liste implementiert ist – Bohemian

+1

Danke .. Ich verstehe, dass es eine verkettete Liste Implementierung ist. Aber wie können wir alle Werte von der Karte bekommen. Wir bekommen nur den zuletzt eingefügten für den gleichen Schlüssel. –

+0

Es gibt nur einen Wert pro Schlüssel. Die alten Werte sind nicht in der Karte vorhanden; das wäre sinnlos. Aber Sie können die Sammlung von Werten (ein Wert pro Schlüssel, offensichtlich) mit 'HashMap.values ​​()' bekommen. –

2

Wenn mehrere Elemente in denselben Bucket geschrieben werden, muss der Bucket alle Elemente enthalten können. Daher wird es in vielen Implementierungen zu einer Art von Sammlung, z. B. einer Liste.

0

Es dient zum Verknüpfen von Einträgen.

+0

Das mag so sein, aber vielleicht ein bisschen Ausarbeitung auf was du meinst wäre gut ... –

Verwandte Themen