如何将HashMap添加到ArrayList中

6

请问为什么下面的代码会用最近添加到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());
    }
}
2个回答

19

问题:

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

每次向ArrayList添加一个元素时,您都在使用相同的键并带有对HashMap的相同引用,从而改变了其值。

解决方案:

每次想要将其添加到ArrayList中时,请创建一个新的HashMap实例,以避免在调用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());
    }
}

我明白了。谢谢你的解释。我会在十分钟内标记为正确。再次感谢。 - AhabLives

0

这是用于将多个地图添加到列表中的操作

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

使用四个空格来使您的代码格式更好 - pragman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接