簡體   English   中英

如何添加一個ArrayList <Integer> 到ArrayList <ArrayList<Integer> &gt;一次又一次地使用ArrayList中的不同元素 <Integer>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM