Pessoal, estava programando um exemplo da pág.321 do livro da kathy e tive uma dúvida :
Map <Object, Object> = new HashMap <Object , Object>();
Dog d1 = new Dog(“clover”);
m.put(d1, “Dog Key”);
d1.name = "arthur"
System.out.println(m.get(new Dog(“clover”)));
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]
luBSPJ
Dezembro 21, 2007, 4:14pm
#2
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 !
luBSPJ
Dezembro 21, 2007, 5:07pm
#5
É 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 …