【问题标题】:HashMap in ArrayList dosent exist outside of loopArrayList 中的 HashMap 在循环之外不存在
【发布时间】:2015-12-24 08:59:56
【问题描述】:

我有一个包含 HashMap 的 ArrayList。

Example of one of the Arraylist lines:
1 = {HashMap@831906200928}  size = 10  
 0 = {HashMap$HashMapEntry@831906220224} "0" -> "false"  
 1 = {HashMap$HashMapEntry@831906220256} "1" -> "false"    
 2 = {HashMap$HashMapEntry@831906220288} "2" -> "false"   
 3 = {HashMap$HashMapEntry@831906220320} "3" -> "false"  
 4 = {HashMap$HashMapEntry@831906220352} "4" -> "false"  
 5 = {HashMap$HashMapEntry@831906220384} "5" -> "false"  
 6 = {HashMap$HashMapEntry@831906220416} "6" -> "false"  
 7 = {HashMap$HashMapEntry@831906220448} "7" -> "false"  
 8 = {HashMap$HashMapEntry@831906220480} "8" -> "false"  
 9 = {HashMap$HashMapEntry@831906220512} "9" -> "false"

当我退出循环时,所有的 HashMap 都消失了,而 ArrayList 的大小仍然存在,但这就是所有列表:

iscompleted = {ArrayList@831906354944}  size = 11
 0 = {HashMap@831906354968}  size = 0  
 1 = {HashMap@831906354968}  size = 0  
 2 = {HashMap@831906354968}  size = 0  
 3 = {HashMap@831906354968}  size = 0  
 4 = {HashMap@831906354968}  size = 0    
 5 = {HashMap@831906354968}  size = 0  
 6 = {HashMap@831906354968}  size = 0  
 7 = {HashMap@831906354968}  size = 0  
 8 = {HashMap@831906354968}  size = 0  
 9 = {HashMap@831906354968}  size = 0  
 10 = {HashMap@831906354968}  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();
>         }

【问题讨论】:

  • 好的,解决了这个问题。只需要删除地图。清除
  • 不,仅删除 map.clear 是不够的。您的 List 的所有位置仍然有相同的 HashMap 实例。

标签: java android-studio expandablelistadapter


【解决方案1】:

您将相同的 HashMap 实例放入列表中,并在每次迭代后清除它。

您应该为添加到列表中的每个元素创建一个新的HashMap

     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);
     }

【讨论】:

  • 感谢伊兰!解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多