猿问

Hashmap 为所有键显示相同的值

我有一个非常简单的代码来使用 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 值中有不同的值,但它们都是相同的。我错过了什么吗?


翻翻过去那场雪
浏览 173回答 2
2回答

婷婷同学_

编码fieldValue.put(...,&nbsp;tmp);并没有克隆列表tmp,它只是把到地图作为一种价值的参考到列表中。所以最后你在地图中有列表的最后一个内容。你应该不回收的tmp变量,但你应该总是创建一个新的独立的列表。
随时随地看视频慕课网APP

相关分类

Java
我要回答