在下面的代碼中: -Java HashMap:JVM中的錯誤或者我做錯了?
- 創建HashMap並添加一些元素。
- 創建第二個HashMap,採用第一個映射。
- 修改第二個HashMap。
第一個HashMap會被修改嗎?
public static void test(){ HashMap<Integer, ArrayList<Integer>> testData = new HashMap<Integer, ArrayList<Integer>>(); testData.put(1, new ArrayList<Integer>(Arrays.asList(777))); System.out.println(testData); HashMap<Integer,ArrayList<Integer>> testData1 = new HashMap<Integer, ArrayList<Integer>> (testData); testData1.get(1).add(888); System.out.println(testData); }
輸出:
{1=[777]}
{1=[777, 888]}
嘗試在這裏:Code on Ideone.com
我預計雙方TESTDATA和testData1是相互獨立的,但似乎他們兩人指的是同一個對象?它是否用於Java?難道我做錯了什麼?
是的,它是有意的。地圖只存儲*引用*,而不是對象。 – 2014-12-06 20:47:16
哦!所以它意味着兩個地圖對象,但包含相同的ArrayList?如何解決這個問題? 我是否需要手動創建另一個數組副本?克隆沒有製作ArrayList的新副本。同樣的問題仍然存在 – 2014-12-06 20:49:05