java 中List包含List,如何新增多個list,Map中包含多個list,如何新增?
1、List中新增list public class TestList { public static void main(String[] args) { List<List<Integer>> vecvecRes = new ArrayList<List<Integer>>(); for (int i = 0; i < 10; i++) { List<Integer> list = new ArrayList<Integer>(); for (int j = 0; j <= 5; j++) { list.add(j); } vecvecRes.add(list); } for(List<Integer> subList : vecvecRes){ System.out.println(subList); } } }
結果如下:
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
2、Map中新增list
public static void main(String[] args) { Map<Integer , List<Integer>> map = new HashMap<Integer , List<Integer>>(); for(int i = 0; i < 10; i++){ List<Integer> list = new ArrayList<Integer>(); for(int j = 0; j < 10; j++){ list.add(j); } map.put(i, list); } for(Integer it : map.keySet()){ System.out.println(it + ":" + map.get(it)); } }
結果如下:
0:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 1:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 5:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 6:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 7:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 8:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 9:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
也許,您會有這樣的疑問,每次都聲明瞭List型別的list,那最後新增的不是指向的最後一個list的內容嗎?
這種說法乍一聽上去是對的,但仔細想想是錯誤的,因為每次迴圈宣告的區域性變數List<Integer> list 在每次迴圈完之後會被記憶體釋放,為該迴圈變數分配的記憶體會被回收,因此,每次拿到的list都是一個新宣告的list。我們可以列印雜湊值來看。
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
一樣的,這是為什麼?????
看這篇部落格吧,講得很好:blog.csdn.net/tmdlife/article/details/51970897
至此,解決了困擾我很久的問題了。。。哈哈哈。。。
附:java中List的遍歷方式:
對List的遍歷有三種方式
List<String> list = new ArrayList<String>();
list.add("testone");
list.add(“testtwo”);
...
第一種:
for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
....
}
這種方式在迴圈執行過程中會進行資料鎖定, 效能稍差, 同時,如果你想在尋歡過程中去掉某個元素,只能呼叫it.remove方法, 不能使用list.remove方法, 否則一定出現併發訪問的錯誤.
第二種:
for(String data : list) {
.....
}
內部呼叫第一種, 換湯不換藥, 因此比Iterator 慢,這種迴圈方式還有其他限制, 不建議使用它。
第三種:
for(int i=0; i<list.size(); i++) {
A a = list.get(i);
...
}
內部不鎖定, 效率最高, 但是當寫多執行緒時要考慮併發操作的問題。