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
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
geht Wenn Sie Beschreibung static int hash(int h)
Methode in HashMap lesen werden Sie feststellen, dass null Schlüssel finden Index 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.
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.
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.
- 1. Benutzerdefinierter Hashcode/Gleich-Operation für HashMap
- 2. HashMap überschreiben gleich und Hashcode
- 3. HashMap-Schlüssel Hashcode kann fehlschlagen?
- 4. Java - Gründe, null als HashMap-Schlüssel zuzulassen?
- 5. Bessere HashCode-Funktion für Börsentiersymbole?
- 6. hashCode Implementierung für Singletonklasse
- 7. hashCode gleich für Collections.unmodifiableCollection()
- 8. Persistenter Hashcode für Strings
- 9. Warum darf eine externe Schnittstelle nicht HashCode/Equals für eine HashMap bereitstellen?
- 10. Warum ist es notwendig Hashcode zu überschreiben und entspricht der Methode des Schlüssels für Hashmap?
- 11. Double in HashMap
- 12. hashCode() Methode für verbundene Unternehmen
- 13. Kollisionsauflösung in HashMap
- 14. Java HashMap Key Verwirrende
- 15. hashcode() und equals() Methode
- 16. Processing.js HashMap
- 17. Statistiken für Java HashMap
- 18. Java - Übergeordnete hashCode und toString
- 19. Java HashMap erkennt Kollision
- 20. Portable hashCode Implementierung für binäre Daten
- 21. Generische reflektive Hilfsmethode für equals und hashCode
- 22. JUnit-Theorie für hashCode/ist gleich Vertrag
- 23. hashCode Implementierung in Java String
- 24. Null Wert in Hashmap in Java
- 25. In Bezug auf hashcode() und equals()
- 26. MD5 HashCode in C# .NET
- 27. Gut hashCode() Implementierung
- 28. HashMap verwendet LinkedList intern
- 29. Schnellster Hashcode-Generator .NET
- 30. Klon-Dienstprogramm für HashMap in Java
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
bedeutet, dass der Hashcode für null 0 oder (in Theorie), jede Zahl, die num & (tableSize-1) == 0 – radai
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