我有一個(gè)非常簡單的代碼來使用 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());}以下是我執(zhí)行時(shí)的輸出st [f, int, false]usc [f, int, false]bas [f, int, false]問題出在哪兒?我期待 hashmap 值中有不同的值,但它們都是相同的。我錯(cuò)過了什么嗎?
2 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
編碼
fieldValue.put(..., tmp);
并沒有克隆列表tmp
,它只是把到地圖作為一種價(jià)值的參考到列表中。
所以最后你在地圖中有列表的最后一個(gè)內(nèi)容。
你應(yīng)該不回收的tmp
變量,但你應(yīng)該總是創(chuàng)建一個(gè)新的獨(dú)立的列表。
添加回答
舉報(bào)
0/150
提交
取消