2013-06-24 10 views
10

Ich habe gerade über den Unterschied zwischen HashMap und HashTable-Klasse in Java gelesen. Dort habe ich einen Unterschied gefunden, dass der ehemalige Nullschlüssel erlaubt und später keine Privilegien für denselben hat. Was die Arbeit von HashMap betrifft, weiß ich, dass es die Hashcode-Methode auf Schlüssel zum Finden des Buckets aufruft, in dem das Schlüsselwertpaar platziert werden soll. Hier kommt meine Frage: Wie Hash-Code für einen Null-Wert berechnet wird oder Gibt es einen Standardwert für Hash-Code von Null-Schlüssel (wenn ja bitte den Wert angeben)?Hashcode für NULL-Schlüssel in HashMap

Antwort

14

von HashMap:

public V put(K key, V value) { 
    if (key == null) 
     return putForNullKey(value); 
    ... 

und wenn man sich weiter sehen Sie, dass null sehen immer bin 0

+0

Das habe ich aus dem HashMap-Klassencode, aber was ist der Hashcode, der für das Setzen dieses Schlüsselwertpaars in diesem Fach generiert wird 0 bedeutet, was der Hashcodewert von Fach 0 ist. – Prashant

+0

bedeutet, dass der Hashcode für null 0 oder (in Theorie), jede Zahl, die num & (tableSize-1) == 0 – radai

+0

Willst du sagen, dass für den Null-Schlüssel, ist der Standardwert von Hashcode 0 und das erste bin/bucket wird verwendet, um es nach der HashMap-Implementierung. – Prashant

3

geht Wenn Sie Beschreibung static int hash(int h) Methode in HashMap lesen werden Sie feststellen, dass null Schlüssel finden Index 0.

0

Wenn ein Nullwert in der Map vorhanden ist, ist der Schlüssel dieses Werts ebenfalls null. Sie können nicht viele Null-Schlüssel in einer Karte haben. Nur ein Nullschlüssel.

5

Aus dem Quellcode von HashMap, wenn der Schlüssel null ist, wird es anders behandelt. Es gibt keinen Hashcode, der für null erzeugt wird, aber er wird eindeutig in einem internen Array mit dem Hash-Wert 0 am Index 0 gespeichert. Beachten Sie auch, dass der Hash-Wert einer leeren Zeichenfolge ebenfalls 0 ist (falls Schlüssel Strings sind), aber der Index dort Im internen Array wird sichergestellt, dass sie nicht durcheinander geraten.

0

Es zeigt deutlich, was passiert, wenn Sie einen Put mit einem Schlüssel machen, der bereits in der Karte war. Der spezielle Fall von key == null verhält sich auf die gleiche Weise: Sie können nicht zwei verschiedene Zuordnungen für den Null-Schlüssel haben (genau wie Sie es für keinen anderen Schlüssel können). Es ist kein spezieller Fall für den Kontext Ihrer Frage.