我有一个非常简单的代码来使用 arrayList 填充 hashmap。以下是代码片段HashMap<String, ArrayList<String> > fieldValue = new HashMap<String, ArrayList<String>>();ArrayList<String> tmp = new ArrayList<>();tmp.add("f");tmp.add("string");tmp.add("false");fieldValue.put("bas", tmp);tmp.clear();tmp.add("f");tmp.add("string");tmp.add("false");fieldValue.put("usc", tmp);tmp.clear();tmp.add("f");tmp.add("int");tmp.add("false");fieldValue.put("st", tmp);for (Map.Entry r : fieldValue.entrySet()) { System.out.println(r.getKey() + "\t" + r.getValue());}以下是我执行时的输出st [f, int, false]usc [f, int, false]bas [f, int, false]问题出在哪儿?我期待 hashmap 值中有不同的值,但它们都是相同的。我错过了什么吗?
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
编码
fieldValue.put(..., tmp);
并没有克隆列表tmp
,它只是把到地图作为一种价值的参考到列表中。
所以最后你在地图中有列表的最后一个内容。
你应该不回收的tmp
变量,但你应该总是创建一个新的独立的列表。
添加回答
举报
0/150
提交
取消