假设我有这部分代码。我有输出。 allValues:[[0,1,2,3,4,5,6,7,8,9,10],[]]。 当我使 listOfValues2 清除()时。我希望只清除该列表而不影响 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);
答案 0 :(得分:6)
我需要这个,因为稍后我将生成另一个listOfValues2和另一个数据集,并将作为第三个列表放入AllValues。
然后不要清除listOfValues2
。稍后创建新的LinkedList
并将其分配给listOfValues2
变量。您对原始listOfValues2
所做的任何更改也将在allValues
中进行,因为listOfValues2
和allValues
的第二个元素共享对象列表的相同引用。
答案 1 :(得分:3)
在这种情况下,您需要这样做。
AllValues.add(new LinkedList<Integer>(listOfValues2)); // this will create a new list with all the values of listOfValues2
因为,如果您只是添加listOfValues2
,那么对其所做的任何更改也会反映在AllValues
中。
答案 2 :(得分:2)
集合类不是不可变的,因此不支持共享。因此,你不能按照你尝试的方式去做。如果您需要一个空列表,请说:
listOfValues2 = new LinkedList<Integer>();
答案 3 :(得分:1)
制作listOfValues2的副本。将其添加到AllValues而不是listOfValues2。
答案 4 :(得分:1)
您只需使用clone()
的{{1}}方法,这样您就只会将LinkedList
的克隆添加到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
列表的任何更新。
答案 5 :(得分:0)
然后你应该将listOfValues2的副本放到AllValues中,或者将另一个数据生成到第三个单独的列表中。
答案 6 :(得分:0)
我认为linklist总是引用内存而不是值。 所以你清除list2然后那个特定的内存没有值。 同样allValue列表引用相同的内存位置,没有值存在。所以它为list2打印为空。