/ / HashMap no Hashmap, fornecendo resultados diferentes que não são esperados - java, hashmap

HashMap dentro do Hashmap dando resultados diferentes que não são esperados - java, hashmap

Estou esperando resultado como AA0={A0=0}, AA1={A1=1}, AA2={A2=2}, AA3={A3=3}, AA4={A4=4}

mas com o código abaixo estou obtendo resultado -

{AA4={A2=2, A1=1, A4=4, A3=3, A0=0}, AA2={A2=2, A1=1, A4=4, A3=3, A0=0}, AA3={A2=2, A1=1, A4=4, A3=3, A0=0}, AA0={A2=2, A1=1, A4=4, A3=3, A0=0}, AA1={A2=2, A1=1, A4=4, A3=3, A0=0}}

Estou fazendo algo errado no código? O que estou vendo durante a depuração é quando o loop for é executado pela segunda vez, hashMap1 contém {AA0={A1=1}} mesmo antes hashMap1.put("AA"+i,hashMap2) É executado. Não sei por que isso está acontecendo. Alguém pode me ajudar a entender isso?

import java.util.HashMap;

public class testingMapList {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

HashMap<String, HashMap<String, Integer>> hashMap1 = new HashMap<String, HashMap<String, Integer>>();
HashMap<String, Integer> hashMap2 = new HashMap<String, Integer>();


for(int i=0;i<5;i++)
{
hashMap2.clear();
hashMap2.put("A"+i, i);
hashMap1.put("AA"+i, hashMap2);
}

System.out.println("HashMap1--->"+hashMap1.get("AA").containsValue("A=4"));

}

}

Respostas:

0 para resposta № 1

O snippet de código abaixo deve ser suficiente para sua exigência.

public static void main (String[] args) throws java.lang.Exception
{
HashMap<String, HashMap<String, Integer>> hash = new HashMap<String, HashMap<String, Integer>>();
for(int i=0; i<5;i++){
HashMap<String, Integer> insideHash = new HashMap<String, Integer>();
insideHash.put("A"+i, i);
hash.put("AA"+i, insideHash);
}
System.out.println(hash);
}

resulta em

{AA0={A0=0}, AA1={A1=1}, AA2={A2=2}, AA3={A3=3}, AA4={A4=4}}

0 para resposta № 2

Você está reutilizando o mesmo hashMap2. Crie um novo dentro do loop em vez de limpá-lo:

hashMap2 = new HashMap<>();

Melhor ainda, declare a variável dentro do loop, então não há risco de reutilizar o mapa acidentalmente (por meio dessa variável).