Lógica de comparação de objetos eficiente. Sugestões

Gostaria de saber a lógica de comparação que vocês usam no método equals.

Todos os meus objetos possuem um ID que é único, então estou pensando em comparar só por isso.
O que vocês acham?

public Boolean equals(Object b){ /*comparações de == e instanceOf*/ return this.id.equals(b.getId()); }

No livro de preparação para a certificação SCJP 6 da Kathy Sierra e do Bert Bates, eles dizem que o equals deve comparar o mínimo de atributos possível, para que se possa identificar se um objeto é igual ao outro.

Se somente pelo id você tem certeza de que pode dizer se um objeto é igual ao outro, então compare somente por ele mesmo.

[quote=Maiconfz]Gostaria de saber a lógica de comparação que vocês usam no método equals.

Todos os meus objetos possuem um ID que é único, então estou pensando em comparar só por isso.
O que vocês acham?

public Boolean equals(Object b){ /*comparações de == e instanceOf*/ return this.id.equals(b.getId()); } [/quote]

Bom, eu geralmente faço assim. Mas isso porque eu (quase) sempre trabalho com listas.

No livro do effective java tem um exemplo de implementação de equals. E sempre que se implementar equals deve-se implementar hashcode também.

Segue um exemplo do livro.


@Override public boolean equals(Object o) {
    if (o == this)
       return true;
    if (!(o instanceof PhoneNumber))
       return false;
    PhoneNumber pn = (PhoneNumber)o;
     return pn.lineNumber == lineNumber 
          && pn.prefix == prefix
            && pn.areaCode == areaCode;
}