如果一个对象拥有唯一的主键,那么它需要实现什么接口(interface)以便于收集友好,尤其是在可有效排序,可哈希化等方面。
如果主键是字符串,那么如何最好地实现这些接口(interface)?
谢谢!
最佳答案
您必须覆盖Object.equals()
和Object.hashCode()
,并且还必须实现Comparable
接口(interface)。在进行任何类型的排序或哈希(包括使用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。