【问题标题】:How to add HashMap to ArrayList如何将 HashMap 添加到 ArrayList
【发布时间】:2014-08-13 18:04:55
【问题描述】:

谁能告诉我为什么下面的代码会用 ArrayList 中的最新条目覆盖 ArrayList 中的每个元素?或者如何正确地将哈希图的新元素添加到我的 ArrayList?

ArrayList<HashMap<String, String>> prodArrayList = new ArrayList<HashMap<String, String>>();

HashMap<String, String> prodHashMap = new HashMap<String, String>();

public void addProd(View ap)
{
    // test arraylist of hashmaps
    prodHashMap.put("prod", tvProd.getText().toString());

    prodArrayList.add(prodHashMap);

    tvProd.setText("");

    // check data ///

    Log.e("myLog","Data prodArrayList in ADD Method Size = "+prodArrayList.size());

    for(int i=0; i< prodArrayList.size();i++)
    {
         Log.e("myLog","Data prodArrayList in ADD Method = "+prodArrayList.get(i).toString());
    }
}

【问题讨论】:

    标签: java android arraylist


    【解决方案1】:

    问题:

    prodHashMap.put("prod", tvProd.getText().toString());
    

    每次将元素添加到数组列表中时,您都使用相同的键,并具有对 HashMap 的相同引用,从而更改其值。

    解决方案:

    每次您想将HashMap 添加到ArrayList 时创建一个新实例,以避免在调用addProd 时更改其值

    public void addProd(View ap)
    {
        // test arraylist of hashmaps
        HashMap<String, String> prodHashMap = new HashMap<String, String>();
        prodHashMap.put("prod", tvProd.getText().toString());
    
        prodArrayList.add(prodHashMap);
    
        tvProd.setText("");
    
        // check data ///
    
        Log.e("myLog","Data prodArrayList in ADD Method Size = "+prodArrayList.size());
    
        for(int i=0; i< prodArrayList.size();i++)
        {
             Log.e("myLog","Data prodArrayList in ADD Method = "+prodArrayList.get(i).toString());
        }
    }
    

    【讨论】:

    • 我明白了。我现在明白了。谢谢你的解释。我会在十分钟内标记为正确。再次感谢。
    【解决方案2】:

    这是为了将多个地图添加到列表中

    Map<String,Object> map1=new HashMap<>();
    map1.  // add required items
    
    Map<String,Object> map2=new HashMap<>();
    map2.  // add required items
    
    Map<String,Object> map3=new HashMap<>();
    map3.  // add required items
    
    List<String,Object> list=new ArrayList<>();
    
    list.add(map1);
    
    list.add(map2);
    
    list.add(map3);
    

    【讨论】:

    • 在任何代码行的开头使用 4 个空格来更好地格式化您的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多