如果一个对象拥有唯一的主键,那么它需要实现什么接口(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。
  • 10-05 22:46
    查看更多