2017-03-18 33 views
0

我正在學習在java中使用Collections。我做的,我所要的輸出是一個簡單的程序:使用ArrayList時的邏輯錯誤<ArrayList <Integer>>收集框架

[1, 2, 3] 
[[1, 2, 3]] 
[5, 6, 7] 
[[1, 2, 3], [5, 6, 7]] 

而不是讓上面的輸出我得到的輸出:

[1, 2, 3] 
[[1, 2, 3]] 
[5, 6, 7] 
[[5, 6, 7], [5, 6, 7]] 

即每次我增加一個ArrayList中新添加,但前一個也被新的替換。我不希望它被替換。任何人都可以解釋我在這裏發生了什麼?我的代碼是:

import java.util.*; 

class Amit{ 
public static void main(String args[]) 
{ 
    ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 
    ArrayList<Integer> b = new ArrayList<Integer>(); 

    b.add(1); 
    b.add(2); 
    b.add(3); 

    System.out.println(b); 
    a.add(b); 
    System.out.println(a); 

    b.clear(); 

    b.add(5); 
    b.add(6); 
    b.add(7); 

    System.out.println(b); 
    a.add(b); 
    System.out.println(a); 

} 
} 
+0

你是治療B,爲一種基本類型,當它是一個對象。當你改變b變成[5,6,7]時,它在兩個地方都變成了[5,6,7],因爲它是同一個對象。 – Gendarme

+0

@Gendarme謝謝。 –

回答

0

a具有列表b的參考。它是一個參考,而不是一個副本。因此,如果您清除b,則a中的所有值都將清空。然後你添加5,6,7並再次添加id。

ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> b = new ArrayList<Integer>(); 

b.add(1); 
b.add(2); 
b.add(3); 

System.out.println(b); 
a.add(b); // a= [[1,2,3]] 
System.out.println(a); 

b.clear(); // a = [[]] 

b.add(5); //a = [[5]] 
b.add(6); // a=[[5,6]] 
b.add(7); // a=[[5,6,7]] 

System.out.println(b); 
a.add(b); //a=[[5,6,7],[5,6,7]] 
System.out.println(a); 

}

相關問題