1. 程式人生 > >java 中List包含List,如何新增多個list,Map中包含多個list,如何新增?

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);   
       ...   
   }   
   內部不鎖定,    效率最高,    但是當寫多執行緒時要考慮併發操作的問題。