我试图像下面的示例中一样重复使用相同的HashMap来填充列表。首先,我在地图中添加了一些值,将地图添加到列表中,然后清除地图以再次添加新值,并在列表中添加第二组值,依此类推...
但是,似乎clear()方法也会删除先前添加在列表中的值,如果我不使用clear()方法,则先前添加在列表中的每组值都会被新的一组值覆盖,从而最终这个特定的例子,我将在列表中有4个相同的值集。
我做错了什么?
List<HashMap<String, String>>dataList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put(Answer.ID, "0");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, firstOption);
dataList.add(map);
map.clear();
map.put(Answer.ID, "1");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, secondOption);
dataList.add(map);
map.clear();
map.put(Answer.ID, "2");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, thirdOption);
dataList.add(map);
map.clear();
map.put(Answer.ID, "3");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, fourthOption);
dataList.add(map);
map.clear();
dataList.add(map)
会将引用添加到map
列表中,因此它不是副本。然后再执行此操作时map.clear()
,它也会删除列表中地图的内容,因为它是同一对象。不要dataList.add(map.clone())
代替或(最好)做map = new HashMap<>();
之后。
map.put(Answer.ID, "0");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, firstOption);
dataList.add(map);
map = new HashMap<>();
旁注:您的代码看起来可以使用对象而不是地图:
class AnswerObject {
private String id;
private String image;
private String title;
public AnswerObject(String id, String image, String title) {
this.id = id;
this.image = image;
this.title = title;
}
// some getters and setters and some other usefull code
}
这应该使您的代码更美观,更易读
List<AnswerObject> dataList = new ArrayList<>();
dataList.add(new AnswerObject("0", "color_icon_awesome", firstOption));
dataList.add(new AnswerObject("1", "color_icon_awesome", secondOption));
dataList.add(new AnswerObject("2", "color_icon_awesome", thirdOption));
dataList.add(new AnswerObject("3", "color_icon_awesome", fourthOption));
但是请随意忽略它;-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句