[英]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
,因為listOfValues2
和allValues
的第二個元素共享對對象列表的相同引用。
在這種情況下,您需要這樣做。
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。
您只需要使用LinkedList
的clone()
方法,即可僅將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.