Вы должны переопределить Object.equals()
и Object.hashCode()
, а также реализовать интерфейс Comparable
. Это сделает ваш класс полностью «совместимым» при выполнении любого вида сортировки или хэширования, включая использование Collections.sort(
), любого класса Map
или любого класса Set
. Если есть даже крошечный шанс того, что класс будет помещен в какую-то коллекцию, тогда он должен определенно реализовать все три из этих методов.
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);
}
}
Имейте в виду, что если два объекта равны, то:
- их хэш-коды также должны быть равны и
compareTo()
должен вернуть 0.