[英]How to add an ArrayList<Integer> to an ArrayList<ArrayList<Integer>> again and again with different elements in ArrayList<Integer>
我在Java中創建了ArrayList的ArrayList。 並且iam將值存儲在它們中,如下所示:
import java.util.ArrayList;
class Test {
public static void main(String args[]) {
ArrayList<ArrayList<Integer>> connections = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> currentConnects = new ArrayList<>();
currentConnects.add(7);
currentConnects.add(4);
connections.add(currentConnects);
currentConnects.clear();
currentConnects.add(10);
currentConnects.add(15);
connections.add(currentConnects);
System.out.println(connections);
}
}
我期望輸出為:
[[7, 4], [10, 15]]
但輸出是:
[[10, 15], [10, 15]]
如何在不使用任何其他額外變量的情況下達到預期的輸出?
實際上,您在connections
對象中兩次引用同一對象,因此得到的結果是。
代替currentConnects.clear();
嘗試currentConnects = new ArrayList<>();
您需要刪除currentConnects.clear();。 並創建一個新的ArrayList對象。您的ArrayList對象指向堆中的同一對象。ArrayList ArrayList<ArrayList<Integer>>
兩次包含ArrayList的相同引用
導入java.util.ArrayList;
class Test {
public static void main(String args[]) {
ArrayList<ArrayList<Integer>> connections = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> currentConnects = new ArrayList<>();
currentConnects.add(7);
currentConnects.add(4);
connections.add(currentConnects);
currentConnects = new ArrayList<>();
currentConnects.add(10);
currentConnects.add(15);
connections.add(currentConnects);
System.out.println(connections);
}
}
您必須每次都創建新的數組列表。
當您這樣做時:
connections.add(currentConnects);
currentConnects.clear();
您首先添加currentConnects的引用,然后清除currentConnects的內容,而不是在創建新的數組列表。 而是:
ArrayList<Integer> currentConnects = new ArrayList<>();
currentConnects.add(7);
currentConnects.add(4);
connections.add(currentConnects);
currentConnects = new ArrayList<>();
currentConnects.add(10);
currentConnects.add(15);
connections.add(currentConnects);
當您調用connections.add(currentConnects);
由於connections
的類型為ArrayList<ArrayList<Integer>>
,實際上是增加了整個ArrayList中連接的參考, 而不是僅僅在ArrayList中本身的整數。
因此,因為您調用connections.add(currentConnects);
兩次,有兩個對connections
ArrayList的引用,這就是為什么保留在connections
中的整數打印兩次的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.