hashCode + equals devem ser redefinidos quando você usa uma classe em:
Um HashSet ou LinkedHashSet;
Uma chave de um HashMap ou LinkedHashMap.
compareTo deve ser definido quando você usa uma class em:
Um TreeSet;
Uma chave de um TreeMap.
A história que você ouviu do “Map” está errada - note que a interface Map é implementada tanto por HashMap e LinkedHashMap (que exigem hashCode + equals) quanto por TreeMap (que exige compareTo ou um objeto Comparator).
Em caso de dúvida, sempre consulte a documentação.
A classe String redefiniu os métodos hashCode e equals, enquanto sua classe, que deriva diretamente de Object, herdou as implementações dos métodos hashCode e equals de Object, que checam apenas se 2 objetos são os mesmos na memória (não o conteúdo deles).
[quote=thingol]A classe String redefiniu os métodos hashCode e equals, enquanto sua classe, que deriva diretamente de Object, herdou as implementações dos métodos hashCode e equals de Object, que checam apenas se 2 objetos são os mesmos na memória (não o conteúdo deles).
[/quote]
thingol perfeita essa sua explicação. Tinha esquecido do detalhe que String implementa hashcode e equals. Vlw pela força.