Einführung
In diesem Lab werden wir uns mit der hashCode()-Methode in Java befassen. Hashing ist eine Technik, die verwendet wird, um einen eindeutigen Wert für einen gegebenen Schlüssel zu generieren. Hashing wird verwendet, um Hash-Tabellen zu implementieren, und diese Datenstrukturen bieten eine schnellere und effizientere Möglichkeit, Daten zu suchen. Die hashCode()-Methode gibt einen ganzzahligen Wert für einen gegebenen Schlüssel zurück. Wir werden lernen, wie die hashCode()-Methode verwendet wird und die Wichtigkeit eines starken hashCode()-Verfahrens.
Erstellen einer Studentenklasse
Zunächst erstellen wir eine Student-Klasse mit Feldern wie Name, Matrikelnummer und GPA.
class Student {
String name;
int regNo;
double gpa;
Student(String name, int regNo, double gpa) {
this.name = name;
this.regNo = regNo;
this.gpa = gpa;
}
}
Verwendung der equals()-Methode
Die equals()-Methode wird verwendet, um zu überprüfen, ob zwei Objekte gleich sind oder nicht. Im vorliegenden Fall werden wir zwei Student-Objekte anhand ihres Namens, ihrer Matrikelnummer und ihres GPA vergleichen.
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass()!= obj.getClass()) {
return false;
}
Student student = (Student) obj;
return regNo == student.regNo &&
Double.compare(student.gpa, gpa) == 0 &&
Objects.equals(name, student.name);
}
Implementierung der hashCode()-Methode
Die hashCode()-Methode gibt einen ganzzahligen Wert für einen gegebenen Schlüssel zurück. Wir werden eine einfache hashCode()-Methode implementieren, die einfach einen ganzzahligen Wert basierend auf dem ersten Buchstaben des Namens des Studenten zurückgibt.
@Override
public int hashCode() {
return (int) this.name.charAt(0) - 64;
}
Verwendung der hashCode()-Methode
Wir können jetzt die hashCode()-Methode verwenden, um Hashcodes für die Student-Objekte zu generieren.
Student s1 = new Student("Alice", 1, 3.7);
Student s2 = new Student("Bob", 2, 3.9);
System.out.println("s1's hash code: " + s1.hashCode());
System.out.println("s2's hash code: " + s2.hashCode());
Implementierung einer starken hashCode()-Methode
Die vorherige hashCode()-Methode ist nicht sehr stark, da verschiedene Studenten mit dem gleichen ersten Buchstaben ihres Namens den gleichen Hash-Wert zugewiesen bekommen. Lassen Sie uns die anderen Felder der Klasse verwenden, um eine stärkere hashCode()-Methode zu schreiben.
@Override
public int hashCode() {
return ((int) this.name.charAt(0) - 64) * this.regNo * (int) this.gpa;
}
Verwendung der eingebauten hashCode()-Methode
Wir können auch die eingebautes hashCode()-Methode für die String-Klasse verwenden, um Hashcodes für die Student-Klasse zu generieren.
@Override
public int hashCode() {
return Objects.hash(name, regNo, gpa);
}
Gleichheitstest
Lassen Sie uns jetzt die Gleichheit zweier Student-Objekte mit der equals()-Methode überprüfen.
Student s1 = new Student("Alice", 1, 3.7);
Student s2 = new Student("Bob", 2, 3.9);
Student s3 = new Student("Alice", 1, 3.7);
System.out.println("s1 equals s2: " + s1.equals(s2));
System.out.println("s1 equals s3: " + s1.equals(s3));
Implementierung von hashCode() für Set
Wir können die Student-Klasse in einem HashSet verwenden. Um das HashSet richtig zu funktionieren, müssen wir sowohl die equals()- als auch die hashCode()-Methode überschreiben.
Set<Student> studentSet = new HashSet<>();
studentSet.add(new Student("Alice", 1, 3.7));
studentSet.add(new Student("Bob", 2, 3.9));
studentSet.add(new Student("Alice", 1, 3.7));
System.out.println(studentSet.size()); // Ausgabe: 2
Implementierung von hashCode() für Map
Wir können auch die Student-Klasse in einer HashMap verwenden. Um die HashMap richtig zu funktionieren, müssen wir sowohl die equals()- als auch die hashCode()-Methode überschreiben.
Map<Student, String> studentMap = new HashMap<>();
studentMap.put(new Student("Alice", 1, 3.7), "Good");
studentMap.put(new Student("Bob", 2, 3.9), "Excellent");
studentMap.put(new Student("Alice", 1, 3.7), "Very Good");
System.out.println(studentMap.size()); // Ausgabe: 2
Ausführen des Codes
Um den Code auszuführen, navigieren Sie zunächst mithilfe des cd-Befehls zum Verzeichnis, in dem der Code gespeichert ist. Verwenden Sie dann den javac-Befehl, um den Code zu kompilieren, und den java-Befehl, um den Code auszuführen.
cd ~/project
javac HashCodeDemo.java
java HashCodeDemo
Zusammenfassung
In diesem Lab haben wir uns mit der hashCode()-Methode in Java beschäftigt, die verwendet wird, um einen eindeutigen Wert für einen gegebenen Schlüssel zu generieren. Wir haben die hashCode()- und equals()-Methoden für die Student-Klasse implementiert und gelernt, wie man eine starke hashCode()-Methode schreibt. Wir haben auch gelernt, wie man die hashCode()- und equals()-Methoden in HashSet und HashMap verwendet.



