Bạn phải ghi đè Object.equals()
và Object.hashCode()
và cũng triển khai giao diện Comparable
. Điều này sẽ làm cho lớp của bạn hoàn toàn "tuân thủ" khi thực hiện bất kỳ loại phân loại hoặc băm nào, kể cả sử dụng Collections.sort(
), bất kỳ lớp nào Map
hoặc bất kỳ lớp nào Set
. Nếu thậm chí có một cơ hội nhỏ rằng lớp học sẽ được đặt trong một số loại bộ sưu tập, thì cần chắc chắn triển khai cả ba phương pháp này.
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);
}
}
Hãy ghi nhớ rằng nếu hai đối tượng đều bình đẳng, sau đó:
- mã băm của họ cũng phải bằng và
compareTo()
phải trở về 0.
Và chắc chắn rằng compareTo tuân theo hợp đồng "bằng". – duffymo
Và các đối tượng bằng nhau có mã băm bằng nhau. – CurtainDog