Wenn unveränderlich, ändert sich der Hashcode des Objekts nicht, und es ermöglicht das Zwischenspeichern des Hashcodes verschiedener Schlüssel, was den gesamten Abrufprozess sehr schnell macht. Auch für veränderbare Objekte ist der hashCode () von Feldern abhängig, die sich ändern könnten. In diesem Fall können Sie den Schlüssel (und seinen Wert) nicht in der HashMap finden, da hashCode () einen anderen Wert zurückgibt.
Sie finden die Antwort hier: Wie HashMap in Java funktioniert
String-, Integer- und andere Wrapper-Klassen sind natürliche Kandidaten für HashMap-Schlüssel, und String wird am häufigsten als Schlüssel verwendet, da String unveränderlich und endgültig ist und die equals- und hashcode () -Methode überschreibt. Andere Wrapper-Klassen haben ähnliche Eigenschaften. Immutabilität ist erforderlich, um Änderungen an Feldern zu verhindern, die zur Berechnung von hashCode () verwendet werden, da wenn das Schlüsselobjekt während des Einfügens und Abrufens einen anderen hashCode zurückgibt, es nicht möglich ist, ein Objekt von HashMap zu erhalten. Unveränderlichkeit ist am besten, da es auch andere Vorteile bietet, wie Thread-Sicherheit, Wenn Sie Ihren HashCode behalten können, indem Sie nur bestimmte Felder endgültig machen, dann gehen Sie auch dafür. Da die Methode equals () und hashCode () beim Abrufen des Wertobjekts von HashMap verwendet wird, ist es wichtig, dass das Schlüsselobjekt diese Methoden korrekt überschreibt und dem Kontakt folgt. Wenn ungleiche Objekte einen unterschiedlichen Hashcode zurückgeben, sind die Wahrscheinlichkeit einer Kollision geringer, was wiederum die Leistung von HashMap verbessert.
Es gibt auch einen anderen Stapel für die Diskussion: Warum sind unveränderliche Objekte in hashmaps so effektiv
Sowohl der Hashcode als auch die equals-Methode werden in der put and get-Methode von HashMap verwendet. Sie müssen sicherstellen, dass Sie das Wertobjekt immer aus der Map abrufen können, nachdem Sie es mit dem Schlüsselobjekt verknüpft haben. Egal, Sie ändern das Schlüsselobjekt oder nicht. Aber unveränderliches Objekt ist gut genug, um das zu erreichen.
Ja, weil es unveränderbar ist.
Nehmen wir an, dass ich eine Klasse habe
%Vor%hier beim Zugriff auf den Schlüssel "Shreyansh" gibt es nulll
zurückTags und Links java