Um die Rolle von HashCode zu verstehen, müssen Sie zunächst die Sammlung in Java kennen.
Im Allgemeinen gibt es in Java zwei Arten von Sammlungen: eine ist Liste und die andere ist Set.
Kennen Sie ihren Unterschied? Die Elemente im ersten Satz sind geordnet, und die Elemente im zweiten Satz sind ungeordnet, aber die Elemente können nicht wiederholt werden.
Hier liegt also ein ernsteres Problem: Wenn Sie sicherstellen möchten, dass sich Elemente nicht wiederholen, auf welcher Grundlage sollte dann beurteilt werden, ob sich zwei Elemente wiederholen?
Dies ist die Object.equals-Methode. Wenn Sie jedoch jedes Mal, wenn ein Element hinzugefügt wird, dies einmal überprüfen, ist die Anzahl der Vergleiche zwischen den zur Sammlung hinzugefügten Elementen sehr groß, wenn viele Elemente vorhanden sind.
Mit anderen Worten: Wenn die Sammlung jetzt 1000 Elemente enthält, wird die Methode „equals“ 1000 Mal aufgerufen, wenn das 1001. Element zur Sammlung hinzugefügt wird. Dies wird natürlich die Effizienz erheblich verringern.
Daher übernimmt Java das Prinzip der Hash-Tabelle. Hash ist eigentlich der Name einer Person, da er das Konzept eines Hash-Algorithmus vorschlug, der nach ihm benannt wurde.
Der Hash-Algorithmus, auch Hash-Algorithmus genannt, ordnet Daten gemäß einem bestimmten Algorithmus direkt einer Adresse zu. Wenn Sie den Hash-Algorithmus im Detail erklären, ist eine längere Artikellänge erforderlich, daher werde ich ihn hier nicht vorstellen.
Anfänger können verstehen, dass die hashCode-Methode tatsächlich die physische Adresse des Objektspeichers zurückgibt (tatsächlich ist dies möglicherweise nicht der Fall).
Auf diese Weise wird beim Hinzufügen eines neuen Elements zur Sammlung zuerst die hashCode-Methode dieses Elements aufgerufen, und der physische Ort, an dem es platziert werden soll, kann sofort lokalisiert werden.
Wenn an dieser Position kein Element vorhanden ist, kann es ohne Vergleich direkt an dieser Position gespeichert werden.
Rufen Sie einfach die Methode „equals“ auf, um es mit dem neuen Element zu vergleichen. Wenn es identisch ist, wird es nicht gespeichert. Wenn es nicht identisch ist, werden andere Adressen gehasht.
Hier besteht also ein Problem der Konfliktlösung. Auf diese Weise wird die Anzahl der tatsächlichen Aufrufe der Methode „equals“ stark reduziert, fast nur ein- oder zweimal.
Daher stellt Java Folgendes für die eqauls-Methode und die hashCode-Methode bereit:
1. Wenn zwei Objekte gleich sind, müssen ihre HashCode-Werte gleich sein. 2. Wenn die HashCodes zweier Objekte gleich sind, sind sie nicht unbedingt gleich. Die oben genannten Objekte beziehen sich auf den Vergleich mit die eqauls-Methode.
Natürlich müssen Sie dies nicht nach Bedarf tun, aber Sie werden feststellen, dass dasselbe Objekt in der Set-Sammlung erscheinen kann. Gleichzeitig wird die Effizienz beim Hinzufügen neuer Elemente erheblich verringert. Mit der Hashcode-Methode wird ermittelt, ob zwei Objekte gleich sind.
Dann würden Sie sagen: Gibt es nicht eine Methode namens equal? Ja, diese beiden Methoden werden verwendet, um festzustellen, ob zwei Objekte gleich sind. Aber sie sind unterschiedlich. Im Allgemeinen wird die Methode „equals“ vom Benutzer aufgerufen, wenn Sie feststellen möchten, ob zwei Objekte gleich sind.
Sie können die Methode „equals“ überschreiben und in Ihrem Code aufrufen, um festzustellen, ob sie gleich sind. Einfach ausgedrückt wird die Gleichheitsmethode hauptsächlich verwendet, um festzustellen, ob zwei Objekte von der Oberfläche oder dem Inhalt her gleich sind. Es gibt zum Beispiel eine Studentenklasse,
Die einzigen Attribute sind Name und Geschlecht. Wir können also davon ausgehen, dass die beiden Objekte gleich sind, solange Name und Geschlecht gleich sind. Die Hashcode-Methode wird im Allgemeinen nicht von Benutzern aufgerufen, da der Schlüssel beispielsweise in Hashmaps nicht wiederholt werden kann.
Als er beurteilte, ob der Schlüssel wiederholt wurde, beurteilte er die Hashcode-Methode und verwendete auch die Gleichheitsmethode. Was hier nicht wiederholt werden kann, bedeutet, dass es in Ordnung ist, solange einer von gleich und Hashcode nicht gleich ist! Vereinfacht ausgedrückt entspricht Hashcode der Codierung eines Objekts, genau wie MD5 in einer Datei. Er unterscheidet sich von equal dadurch, dass er einen int-Typ zurückgibt, was im Vergleich dazu nicht intuitiv ist. Wir überschreiben im Allgemeinen Hashcode, wenn wir Gleiche überschreiben, um ihre Logik konsistent zu machen. Zum Beispiel,
Wenn der Name und das Geschlecht gleich sind und die beiden Objekte gleich sind, sollte die Hashcode-Methode auch den Hashcode-Wert des Namens plus den Hashcode-Wert des Geschlechts zurückgeben, sodass sie logischerweise konsistent sind .
Um physikalisch zu bestimmen, ob zwei Objekte gleich sind, verwenden Sie einfach ==