2015-12-24 1 views
1

J'ai une ArrayList qui contient une HashMap.HashMap dans ArrayList dosent existe en dehors de la boucle

Example of one of the Arraylist lines: 
1 = {[email protected]} size = 10 
0 = {[email protected]} "0" -> "false" 
1 = {[email protected]} "1" -> "false"  
2 = {[email protected]} "2" -> "false" 
3 = {[email protected]} "3" -> "false" 
4 = {[email protected]} "4" -> "false" 
5 = {[email protected]} "5" -> "false" 
6 = {[email protected]} "6" -> "false" 
7 = {[email protected]} "7" -> "false" 
8 = {[email protected]} "8" -> "false" 
9 = {[email protected]} "9" -> "false" 

Lorsque je quitte la boucle, tous les HashMap est parti et istead, la taille ArrayList reste, mais c'est toute la liste:

iscompleted = {[email protected]} size = 11 
0 = {[email protected]} size = 0 
1 = {[email protected]} size = 0 
2 = {[email protected]} size = 0 
3 = {[email protected]} size = 0 
4 = {[email protected]} size = 0  
5 = {[email protected]} size = 0 
6 = {[email protected]} size = 0 
7 = {[email protected]} size = 0 
8 = {[email protected]} size = 0 
9 = {[email protected]} size = 0 
10 = {[email protected]} size = 0 


>   ArrayList<HashMap<String, Boolean>> iscompleted = new ArrayList<HashMap<String, Boolean>>(); 
>   HashMap map = new HashMap<String, Object>(); 
>   for (i=0; i<_listDataHeader.size(); i++) { 
>    for (int j=1; j<_listDataChild.size(); j++){ 
>     map.put(j-1, tasks.get(x).get("isCompleted")); 
>     x++; 
>    } 
>    iscompleted.add(map); 
>    map.clear(); 
>   } 
+0

Ok, résolu le problème. Il suffit de retirer la map.clear –

+0

Non, le simple fait de supprimer map.clear ne suffit pas. Vous auriez toujours la même instance HashMap dans toutes les positions de votre liste. – Eran

Répondre

1

Vous mettez la même instance HashMap dans la liste et vous l'effacez après chaque itération.

Vous devez créer un nouveau HashMap pour chaque élément que vous ajoutez à la liste:

 ArrayList<HashMap<String, Boolean>> iscompleted = new ArrayList<HashMap<String, Boolean>>(); 
    for (i=0; i<_listDataHeader.size(); i++) { 
     HashMap map = new HashMap<String, Object>(); 
     for (int j=1; j<_listDataChild.size(); j++){ 
      map.put(j-1, tasks.get(x).get("isCompleted")); 
      x++; 
     } 
     iscompleted.add(map); 
    } 
+0

Merci Eran! Résolu le problème –