簡體   English   中英

LinkedList清除方法

[英]LinkedList clear method

假設我有這部分代碼。 而且我有輸出。 allValues:[[0,1,2,3,4,5,6,7,8,9,10],[]]。 當我使listOfValues2 clear()時。 我希望只清除該列表,而不影響allValues列表中的值。 我該怎么做? 我需要這樣做 ,因為稍后我將生成具有另一個數據集的另一個listOfValues2 ,並將其作為第三個列表放入allValues中。

     LinkedList<Integer> listOfValues1 = new LinkedList<Integer>();
     LinkedList<Integer> listOfValues2 = new LinkedList<Integer>();
     LinkedList<LinkedList<Integer>> allValues= 
     new LinkedList<LinkedList<Integer>>();

     for(int w=0; w<=10; w++) {
        listOfValues1.add(w);
     }

     for(int b=5; b<=15; b++) {
        listOfValues2.add(b);
     }

     allValues.add(listOfValues1);
     allValues.add(listOfValues2);
     listOfValues2.clear();
     System.out.println("allValues: " + allValues);

我需要這樣做,因為稍后我將生成具有另一個數據集的另一個listOfValues2,並將其作為第三個列表放入AllValues中。

然后不要清除listOfValues2 稍后創建新的LinkedList並將其分配給listOfValues2變量。 您對原始listOfValues2所做的任何更改也將在allValues ,因為listOfValues2allValues的第二個元素共享對對象列表的相同引用。

在這種情況下,您需要這樣做。

AllValues.add(new LinkedList<Integer>(listOfValues2)); // this will create a new list with all the values of listOfValues2

因為,如果僅添加listOfValues2 ,則listOfValues2任何更改也將反映在AllValues中。

收集類不是一成不變的,因此不支持共享。 因此,您無法以嘗試的方式進行操作。 如果您需要一個空列表,只需說:

listOfValues2 = new LinkedList<Integer>();

復制listOfValues2。 將其添加到AllValues而不是listOfValues2。

您只需要使用LinkedListclone()方法,即可僅將listOfValues2的副本添加到AllValues

public class Main {

    public static void main(String[] args) {

        LinkedList<Integer> listOfValues1 = new LinkedList<Integer>();
        LinkedList<Integer> listOfValues2 = new LinkedList<Integer>();
        LinkedList<LinkedList<Integer>> AllValues = new LinkedList<LinkedList<Integer>>();

        for (int w = 0; w <= 10; w++) {
            listOfValues1.add(w);  
        }

        for (int b = 5; b <= 15; b++) {
            listOfValues2.add(b);  
        }

        AllValues.add(listOfValues1);

        // adding a cloned Linkedlist        
        AllValues.add((LinkedList<Integer> ) listOfValues2.clone());
        System.out.println("AllValues: " + AllValues);
        listOfValues2.clear();
        System.out.println("AllValues: " + AllValues);  
    }
}

這里的重點是當您創建列表的克隆時, AllValues將不再引用listOfValues2 因此,對listOfValues2列表的任何更新對於AllValues不可見的。

然后,您應該將listOfValues2的副本放入AllValues或將另一個數據生成到第三個單獨的列表中。

我認為鏈表總是引用內存而不是值。 所以您清除list2則該特定內存沒有值。 同樣,allValue列表引用相同的內存位置,不存在任何值。 因此它為list2打印為空。

暫無
暫無

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

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