Sie müssen Object.equals()
und Object.hashCode()
außer Kraft setzen und auch die Schnittstelle Comparable
implementieren. Dies macht Ihre Klasse vollständig "konform", wenn Sie irgendeine Art von Sortierung oder Hashing durchführen, einschließlich der Verwendung von Collections.sort(
, einer beliebigen Map
Klasse oder einer beliebigen Set
Klasse. Wenn es sogar eine winzige Chance gibt, dass die Klasse in eine Art Sammlung gelegt wird, dann sollte es definitiv implementieren alle drei dieser Methoden.
public class A implements Comparable<A>{
private String key;
@Override
public boolean equals(Object obj){
if (this == obj) return true;
if (!(obj instanceof A)) return false;
A that = (A)obj;
return this.key.equals(that.key);
}
@Override
public int hashCode(){
return key.hashCode();
}
@Override
public int compareTo(A that){
//returns -1 if "this" object is less than "that" object
//returns 0 if they are equal
//returns 1 if "this" object is greater than "that" object
return this.key.compareTo(that.key);
}
}
Denken Sie daran, dass, wenn zwei Objekte gleich sind, dann gilt:
- ihre Codes Hash auch gleich sein müssen und
compareTo()
0.
zurückkehren müssen und sicherstellen, dass compareTo entspricht dem "equals" -Vertrag. – duffymo
Und dass gleiche Objekte gleiche Hashcodes haben. – CurtainDog