Dúvida sobre HashMap

Pessoal, estava programando um exemplo da pág.321 do livro da kathy e tive uma dúvida :

Ele não consegue recuperar o objeto porque “arthur” é um nome diferente de “clover” (Dog sobrescreve o método equals).Mas se eu fizer,

funciona… Ele consegue recuperar. Por quê (já que arthur continua sendo diferente de clover)?
[/quote][/list]

Oi, posta como vc sobrescreveu o equals…

de qualquer forma as buscas em tabelas hash (nos Maps) só funcionam bem quando você sobrescreve hashcode tb…

da uma lida nesse tópico para entender o hashcode

http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=41970

O objeto de d1 e o objeto que está no Map é o mesmo (leia sobre referências), portanto, quando você altera o atributo name de d1, está alterando o mesmo objeto que está no Map, você deve estar pensando que fica um objeto em d1 com o name = “arthur” e outro no Map com name = “clover”, mas na verdade é um só. Mas quando você faz new Dog(“clover”), aí sim você está criando um segundo objeto, que é diferente do que está no Map, pois o do Map tem o name = “arthur” (era “clover”, mas você alterou com d1.name=“arthur”).

Entendeu? :roll:

Entendi agora . Vlw Jair !

É verdade, nem tinha notado isso no código, ja fui direto falando de hashcode
:oops:

de qualquer forma sempre sobrescreva o hashcode tb qdo vc for mexer com tabelas hash.

Aí vai outra dúvida :

Dog d1= new Dog("clover");
map.put(d1, PETS.DOG);

d1.name = "clover";
System.out.println(map.get(new Dog("clover")));

Neste caso, o problema está em que não é retornado nada (NULL), mas era pra retornar , não é ? Pois o nome continua o mesmo : clover …

Aí vai outra dúvida :

Dog d1= new Dog("clover");
map.put(d1, PETS.DOG);

d1.name = "clover";
System.out.println(map.get(new Dog("clover")));

Neste caso, o problema está em que não é retornado nada (NULL), mas era pra retornar , não é ? Pois o nome continua o mesmo : clover …

Aí vai outra dúvida :

Dog d1= new Dog("clover");
map.put(d1, PETS.DOG);

d1.name = "clover";
System.out.println(map.get(new Dog("clover")));

Neste caso, o problema está em que não é retornado nada (NULL), mas era pra retornar , não é ? Pois o nome continua o mesmo : clover …