Collections

4 respostas
M

Pessoal

Não estou entendo esse codigo vejam

Hashtable tempHash = new Hashtable();
        Vector v = new Vector();
        tempHash.put("nome", "Marcelo");
        v.add(0,tempHash);
        tempHash.clear();
        tempHash.put("sobrenome", "Ribeiro");
        v.add(1,tempHash);
                
        System.out.println(v);

a saida é

[{sobrenome=Ribeiro}, {sobrenome=Ribeiro}]

nao deveria ser

[{nome=Marcelo}, {sobrenome=Ribeiro}]

se eu fizer assim
v.clear();
        v.add(0, "Marcelo");
        v.add(1, "Ribeiro");
        System.out.println(v);
a saida será
[Marcelo, Ribeiro]

Alguem poderia explicar pq no primeiro trecho é sobreposto os valores no vector?

Obrigado

4 Respostas

D

Quando você adiciona algum objeto no Vector, você não está criando uma cópia do HashTable dentro do Vector e sim apenas está passando a referência na memória do objeto. Na segunda vez que vc adiciona o HashTable, ele continua sendo o mesmo objeto ainda, mesmo que esteja modificado.

Resumindo, tanto a posição 0 quanto a posição 1 do Vector apontam para o mesmo objeto, sendo imprimido apenas que está dentro deste objeto.

M

entendi…e haveria uma maneira d passar uma copia do hash ao inves de apenas sua referencia??

Valeu!

D

Hashtable tempHash = new Hashtable(); Vector v = new Vector(); tempHash.put("nome", "Marcelo"); v.add(0,tempHash.clone()); tempHash.clear(); tempHash.put("sobrenome", "Ribeiro"); v.add(1,tempHash.clone()); System.out.println(v);

Uma sugestão é a de utilizar o método clone().

M

Valeu!!!

Criado 27 de junho de 2005
Ultima resposta 27 de jun. de 2005
Respostas 4
Participantes 2