Die hashCode()
Methode gehört zur Klasse Object
in Java und sie ist für alle Java-Objekte verfügbar. Die Rückgabeart dieser Methode ist int
. Dies ist entscheidend für die Funktionsweise von Hash-basierten Sammlungen wie HashSet
, HashMap
oder HashTable
.
Die Funktion der hashCode()
Methode besteht darin, für jedes Objekt in Java einen eindeutigen Identifikator zu generieren. Dieser Identifikator ist ein Integer-Wert und wird verwendet, um Objekte in hashbasierten Java-Sammlungen effizient zu speichern und aufzurufen.
Ein einfaches Beispiel für die Verwendung der hashCode()
Methode könnte wie folgt aussehen:
public class MyObject {
private String name;
public MyObject(String name) {
this.name = name;
}
@Override
public int hashCode() {
return name.hashCode();
}
}
In diesem Beispiel gibt die hashCode()
Methode den Hash-Code des name
-Feldes zurück. Da der Rückgabetyp dieser Methode int
ist, muss jeder berechnete Hash-Code ein int
sein.
Es ist wichtig zu beachten, dass die hashCode()
Methode in Übereinstimmung mit der equals()
Methode überschrieben werden sollte. Das bedeutet, dass zwei Objekte, die gemäß der equals()
Methode gleich sind, auch den gleichen Hash-Code haben sollten.
Schauen wir uns an, was das bedeutet:
public class MyObject {
private String name;
public MyObject(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
MyObject myObject = (MyObject) obj;
return name.equals(myObject.name);
}
@Override
public int hashCode() {
return name.hashCode();
}
}
In diesem aktualisierten Beispiel werden zwei MyObject
Instanzen als gleich betrachtet, wenn sie den gleichen name
haben. Daher wird die hashCode()
Methode so überschrieben, dass sie den Hash-Code des name
-Feldes zurückgibt. Daher haben zwei MyObject
Instanzen mit dem gleichen name
den gleichen Hash-Code.
Zusammengefasst ist der Rückgabetyp der hashCode()-Methode in Java int
. Diese Methode spielt eine wichtige Rolle bei der Arbeitsweise von hash-basierten Sammlungen und sollte immer in Übereinstimmung mit der equals()
Methode überschrieben werden.