Beurteilungsreihenfolge: HashSet wird zuerst beurteilen, ob es ein Objekt mit demselben Hashcode gemäß dem Hashcode der Zielklasse gibt, wenn add ausgeführt wird, und wenn ja, verwenden Sie equals, um zu beurteilen, ob es dasselbe Objekt ist.
Der Standardwert equals vergleicht den Adresswert.
Beim Überschreiben der equals-Methode muss die hashCode-Methode überschrieben werden.
Beispiel: Wir möchten nur anhand der ID feststellen, ob es sich um denselben Schüler handelt, dh Schüler mit derselben ID können nicht in der Menge auftauchen.
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Stu> set = new HashSet<>();
for (int i = 1; i <= 5; i++) {
set.add(new Stu(i));
}
for (int i = 1; i <= 3; i++) {
set.add(new Stu(i));
}
System.out.println(set.toString());
}
}
class Stu {
int id;
String name;
public Stu(int id) {
this.id = id;
}
public String toString() {
return "编号:" + this.id;
}
/*
@Override 必须带上重写符号
public int hashCode() {
return this.id;
}
@Override
public boolean equals(Object s) {//必须是Object类
Stu ss = (Stu)s;//转为Stu类
return this.id == ss.id;
}
*/
}
Laufendes Ergebnis:
nach Entfernen des Kommentars: