簡體   English   中英

JAVA,列表清單

[英]JAVA, list of lists

我有列表和列表列表:

ArrayList<String> singleList = new ArrayList<String>();
ArrayList<ArrayList<String>> listOfLists = new ArrayList<ArrayList<String>>();

我不明白這些列表的行為。 我決定給你一個簡單的例子:

listOfLists.clear();

singleList.clear();
singleList.add("A");
singleList.add("B");
singleList.add("C");
listOfLists.add(singleList);

singleList.clear();
singleList.add("D");
singleList.add("E");
singleList.add("F");
listOfLists.add(singleList);

singleList.clear();
singleList.add("G");
singleList.add("H");
singleList.add("I");
listOfLists.add(singleList);

for(int x = 0; x < listOfLists.size(); x++)
{
    for(int z = 0; z < singleList.size(); z++)
        {
        System.out.print(listOfLists.get(x).get(z));
        System.out.print(" ");
    }
    System.out.println("");
}

我得到的結果是:

GHIGHIGHI

代替:

ABCDEFGHI

我的想法出在哪里? 如何獲得上述結果?

對象始終作為Java中的引用傳遞。

singleList添加到listOfLists ,實際上是在添加對singleList 的引用 由於你已經添加了3次,你得到了singleList的當前值,重復了3次。

singleList“先前值”無處存儲,因此ABCDEF丟失。

您需要使用new ArrayList<String>(singleList)制作列表的副本。 然后,將此副本添加到listOfLists

問題是對象引用如何工作。 一步一步走

singleList.clear();
singleList.add("A");
singleList.add("B");
singleList.add("C");
listOfLists.add(singleList);

//singleList -> A, B, C 
//listOfLists -> singleList

singleList.clear();
singleList.add("D");
singleList.add("E");
singleList.add("F");
listOfLists.add(singleList);

//singleList -> D, E, F
//listOfLists -> singleList, singleList

singleList.clear();
singleList.add("G");
singleList.add("H");
singleList.add("I");
listOfLists.add(singleList);

//singleList -> G, H, I
//listOfLists -> singleList, singleList, singleList

現在,您正在打印listOfLists,它包含3次singleList。 但是singleList現在包含G,H,I

要獲得所需的結果,您需要使用不同的列表,一個是A,B,C,另一個是D,E,F,另一個是G,H,I。

singleList1 -> A, B, C
singleList2 -> D, E, F
singleList3 -> F, G, H
listOfLists -> singleList1, singleList2, singleList3

您可以在添加到listOfLists時執行此操作,而不是為singleList提供不同的變量:listOfLists.add(new ArrayList(singleList));

這會創建一個具有不同內存位置的單個列表的副本,這與您引用相同位置的內存位置不同。

要創建列表列表,可以輕松使用ArrayList<ArrayList<Integer>> listOfLists = new ArrayList<ArrayList<Integer>>; 制作整數列表的列表,或用String或任何你想要的東西替換Integer 要訪問項目,請使用listOfLists.get(0).get(0) ,例如,獲取listOfLists第一個列表的第一項。 不確定這是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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