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 № 1O 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).