Heim  >  Artikel  >  Java  >  So ändern Sie den Wert in Hashmap basierend auf dem Schlüsselwert in Java

So ändern Sie den Wert in Hashmap basierend auf dem Schlüsselwert in Java

王林
王林nach vorne
2023-05-13 14:25:063210Durchsuche

    Ändern Sie den Wert der Hashmap entsprechend dem Schlüsselwert.

    Wenn in der Originalkarte kein Schlüssel vorhanden ist, wird sie erstellt. Wenn der Originalschlüssel vorhanden ist, wird der Originalwert mit dem Wert überschrieben

    Diese Implementierung fügt eins zum ursprünglichen Wert hinzu (Voraussetzung: Es gibt diesen Schlüssel)

    map.put(key,value);

    Der dem Schlüssel entsprechende Wert kann wie folgt erhalten werden. Wenn nicht, kann der Standardwert zurückgegeben werden Der Schlüssel von HashMap wird geändert?

    Eine Reihe von Schlüssel-Wert-Paaren, die in HashMap gespeichert sind, wobei der Schlüssel ein benutzerdefinierter Typ ist. Nachdem wir es in HashMap eingefügt haben, ändern wir die Attribute eines bestimmten Schlüssels extern und verwenden dann diesen Schlüssel, um Elemente aus HashMap herauszunehmen. Was wird HashMap zu diesem Zeitpunkt zurückgeben?

    Mehrere Leute in unserem Büro haben unterschiedliche Antworten. Einige sagen, dass es null zurückgibt, andere sagen, dass es normal einen Wert zurückgeben kann. Aber was auch immer die Antwort sein mag, es gibt keinen stichhaltigen Grund. Ich fand diese Frage sehr interessant und habe daher einen Codetest geschrieben. Das Ergebnis ist null. Es ist zu beachten, dass unsere benutzerdefinierte Klasse die Methode hashCode überschreibt. Ich denke, dieses Ergebnis ist etwas unerwartet, da wir wissen, dass HashMap Referenztypen speichert, und wir den Schlüssel außerhalb aktualisiert haben, was bedeutet, dass der Schlüssel in der HashMap ebenfalls aktualisiert wird, was bedeutet, dass der hashCode-Rückgabewert dieses Schlüssels ebenfalls auftritt . ändern. Zu diesem Zeitpunkt muss der HashCode von Schlüssel und HashMap mit dem HashCode des Elements identisch sein, und equal gibt definitiv true zurück, da es sich um dasselbe Objekt handelt. Warum kann es also nicht den richtigen Wert zurückgeben?

    Testfall

    Hier gibt es zwei Fälle, einer ist die Person-Klasse und der andere ist die Student-Klasse. Überprüfen wir den obigen Standpunkt (mit Schlussfolgerung):

    Ob das Ändern der Objekteigenschaften seine ändert hashcode => Ja
    • Wird das Attribut durch die Änderung des Werts beim Zugriff auf die HashMap beeinflusst? => Der Wert ist null
    • 123456

      person
    • person
    7115 4

    Student

    71213
    null




    Quellcode


    hashCode-Quellcode

    map.put(key,map.get(key)+1);

    map.get Quellcode
    map.getOrDefault(key,value);

    Kurz gesagtSie können sehen, dass zuerst eine Tabelle erhalten wird, bei der es sich tatsächlich um ein Array handelt. Suchen Sie dann in der Tabelle den Wert, der dem Schlüssel entspricht. Das Kriterium für die Suche besteht darin, dass der Hash dem Hash des übergebenen Parameters entspricht und eine der beiden anderen Bedingungen erfüllt: k = e.key, was bedeutet, dass es sich um dasselbe Objekt oder den Schlüssel des gleichen Ziels handelt des übergebenen Schlüssels. Unser Problem liegt im Hash(key.hashCode()). Sie können sehen, dass HashMap den HashCode des Schlüssels beim Speichern von Elementen hasht. Der erhaltene Hash wird schließlich als Grundlage für den Speicherort des Elements verwendet. Entsprechend unserer Situation: Beim ersten Speichern verwendet die Hash-Funktion key.hashCode als Parameter, um einen Wert abzurufen, und speichert das Element dann basierend auf diesem Wert an einem bestimmten Ort.

    Wenn wir das Element erneut abrufen, hat sich der Wert von key.hashCode geändert, sodass sich auch das Ergebnis der Hash-Funktion hier geändert hat. Wenn also versucht wird, den Speicherort dieses Schlüssels abzurufen, kann das Ergebnis nicht ermittelt werden im Zielelement wird am Ende nicht gefunden. Um es korrekt zurückzugeben, ist es sehr einfach, die HashCode-Methode der Person-Klasse so zu ändern, dass ihr HashCode nicht von dem Attribut abhängt, das wir ändern möchten. Wir hoffen jedoch immer, dass dies der Fall ist Die Attribute der beiden Objekte sind unterschiedlich. Wenn sie genau gleich sind, können unterschiedliche HashCode-Werte zurückgegeben werden.

    Die Schlussfolgerung ist also, dass Sie nach dem Platzieren des Objekts in einer HashMap die Attribute des Schlüssels nicht ändern dürfen, es sei denn, Sie überschreiben die hashCode-Methode der Entitätsklasse, die keinen Attributbeschränkungen unterliegt.

    Das obige ist der detaillierte Inhalt vonSo ändern Sie den Wert in Hashmap basierend auf dem Schlüsselwert in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen