java中list的clear()問題
阿新 • • 發佈:2019-01-07
將list集合呼叫clear()方法,將list放入map中,再重新給list賦值。然後再將新的list放入map中,發現map中的兩個list一樣?
例子程式碼一:用list.clear()方法清空list
@Test
public void test(){
Map<String,List<String>> testMap = new HashMap<String, List<String>>();
List<String> aLst = new ArrayList<String>();
aLst.add("1");
aLst.add("2");
testMap.put("a", aLst); //此時map中的元素 key為a ,value為[1,2]
System.out.println("原來的aLst " + aLst);
System.out.println("原來的map " + testMap);
aLst.clear();
System.out.println("clear後的aLst " + aLst);
aLst.add("3");
aLst.add("4");
aLst.add("5");
testMap.put("b", aLst); //此時map中的元素 key為a ,value為[1,2]
System.out.println("後來的aLst " + aLst);
System.out.println("後來的map " + testMap);
}
輸出結果
原來的aLst [1, 2]
原來的map {a=[1, 2]}
clear後的aLst []
後來的aLst [3, 4, 5]
後來的map {b=[3, 4, 5], a=[3, 4, 5]}
例子程式碼2:list = null來清空list
@Test
public void test2(){
Map<String,List<String>> testMap = new HashMap<String, List<String>>();
List<String> aLst = new ArrayList<String>();
aLst.add("1");
aLst.add("2");
testMap.put("a", aLst); //此時map中的元素 key為a ,value為[1,2]
System.out.println("原來的aLst " + aLst);
System.out.println("原來的map " + testMap);
aLst = null;
System.out.println("clear後的aLst " + aLst);
aLst.add("3");
aLst.add("4");
aLst.add("5");
testMap.put("b", aLst); //此時map中的元素 key為a ,value為[1,2]
System.out.println("後來的aLst " + aLst);
System.out.println("後來的map " + testMap);
}
執行結果
原來的aLst [1, 2]
原來的map {a=[1, 2]}
clear後的aLst null
例子程式碼三:new ArrayList()來清空list
@Test
public void test3(){
Map<String,List<String>> testMap = new HashMap<String, List<String>>();
List<String> aLst = new ArrayList<String>();
aLst.add("1");
aLst.add("2");
testMap.put("a", aLst); //此時map中的元素 key為a ,value為[1,2]
System.out.println("原來的aLst " + aLst);
System.out.println("原來的map " + testMap);
aLst = new ArrayList<String>();
System.out.println("clear後的aLst " + aLst);
aLst.add("3");
aLst.add("4");
aLst.add("5");
testMap.put("b", aLst); //此時map中的元素 key為a ,value為[1,2]
System.out.println("後來的aLst " + aLst);
System.out.println("後來的map " + testMap);
}
執行結果
原來的aLst [1, 2]
原來的map {a=[1, 2]}
clear後的aLst []
後來的aLst [3, 4, 5]
後來的map {b=[3, 4, 5], a=[1, 2]}
結論(猜想):
map中的value值引用的是記憶體地址,所以當我們new了一個新的list時,map中新增的list和原來的list才會不同。而當我們執行list = null時,list.add()方法失效並報錯,猜想此時的list不再是List集合.