IdentityHashMap quebra o contrato de Map e diz que duas chaves são iguais se, e apenas se, ref1 == ref2. Como strings declarados de forma literal (os seus “a”'s) vão pro cache de strings da JVM, esses três “a” declarados como literais são na verdade o mesmo objeto, então ambas as referências apontam pro mesmo lugar (e consequentemente “a” == “a” vai ser verdadeiro).
Na primeira inserção, a chave “a” vai ficar com o valor 1 e na sequência ela vai ter o valor alterado, mas não vão ser criadas novas chaves para “a” porque sempre que o “put” acontecer, o map vai perceber que “a” já está lá dentro (quando ele fizer “a” == “a”).
Luca
Olá
Pô, tinha que ser você a responder, um pós doutorado em todas as picuinhas, maneirices e caraminholas do Java (e do Ruby também)?
Tirou a graça seu sabudo… rs.
Eu aqui achava que a mais votada seria que imprime 3. Mas admito que alguns ainda iam chutar outras coisas.
Parabéns!!!
[]s
Luca
Zeed01
Boa noite colegas !
opção c) 1
Porque as chaves são iguais ? Logo só substitui os valores sem criar novos.
[]s
PS - Como sempre posso ter falado uma grande bobagem. rsrs
Desculpem… não tinha visto que já tinha sido respondido e explicado
gui_sv
esse exercicio é de simulado para SCJP ???
Otima solução !!
Luca
Olá
Não, é uma sutileza de uma classe especifíca, que como bem disse o Maurício, tem um comportamento especial diferente das outras similares. Aliás, parece que no Java 7 virá uma irmãzinha dela.
[]s
Luca
gui_sv
entendi … obrigado
danielbussade
Maurício Linhares:
Imprime 1.
Motivos?
IdentityHashMap quebra o contrato de Map e diz que duas chaves são iguais se, e apenas se, ref1 == ref2. Como strings declarados de forma literal (os seus “a”'s) vão pro cache de strings da JVM, esses três “a” declarados como literais são na verdade o mesmo objeto, então ambas as referências apontam pro mesmo lugar (e consequentemente “a” == “a” vai ser verdadeiro).
Na primeira inserção, a chave “a” vai ficar com o valor 1 e na sequência ela vai ter o valor alterado, mas não vão ser criadas novas chaves para “a” porque sempre que o “put” acontecer, o map vai perceber que “a” já está lá dentro (quando ele fizer “a” == “a”).
Olá Maurício, se pudesse me esclarecer uma dúvida, porque IdentityHashMap quebra o contrato de Map, todos os contratos de Map não seriam as chaves sao iguais se, e apenas se, ref1 == ref2?? Ou seja este mesmo programa substituindo IdentityHashMap por HashMap ou HashTable, não imprimiria a mesma coisa??
Obrigado
Mauricio_Linhares
Não, no contrato de Map duas chaves são iguais se elas são equals, não se as referências são iguais.
Esse código vai imprimir 2, mas se você colocar um HashMap ele vai imprimir 1.
cassio
danielbussade:
Maurício Linhares:
Imprime 1.
Motivos?
IdentityHashMap quebra o contrato de Map e diz que duas chaves são iguais se, e apenas se, ref1 == ref2. Como strings declarados de forma literal (os seus “a”'s) vão pro cache de strings da JVM, esses três “a” declarados como literais são na verdade o mesmo objeto, então ambas as referências apontam pro mesmo lugar (e consequentemente “a” == “a” vai ser verdadeiro).
Na primeira inserção, a chave “a” vai ficar com o valor 1 e na sequência ela vai ter o valor alterado, mas não vão ser criadas novas chaves para “a” porque sempre que o “put” acontecer, o map vai perceber que “a” já está lá dentro (quando ele fizer “a” == “a”).
Olá Maurício, se pudesse me esclarecer uma dúvida, porque IdentityHashMap quebra o contrato de Map, todos os contratos de Map não seriam as chaves sao iguais se, e apenas se, ref1 == ref2?? Ou seja este mesmo programa substituindo IdentityHashMap por HashMap ou HashTable, não imprimiria a mesma coisa??
Obrigado
No caso do contrato inicial do Map, duas chaves são iguais se chaveA.equals(chaveB). Não é levado em consideração o valor das referências.
Mauricio_Linhares
Luca:
Olá
Pô, tinha que ser você a responder, um pós doutorado em todas as picuinhas, maneirices e caraminholas do Java (e do Ruby também)?
Tirou a graça seu sabudo… rs.
Eu aqui achava que a mais votada seria que imprime 3. Mas admito que alguns ainda iam chutar outras coisas.
Parabéns!!!
[]s
Luca
Foi mal Luca, tava num momento de insônia e terminei caindo no seu tópico :lol:
Próxima vez eu espero um pouco mais
danielbussade
Não, no contrato de Map duas chaves são iguais se elas são equals, não se as referências são iguais.