LinkedList清除方法

时间:2013-11-05 07:54:32

标签: java linked-list

假设我有这部分代码。我有输出。 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);

7 个答案:

答案 0 :(得分:6)

  

我需要这个,因为稍后我将生成另一个listOfValues2和另一个数据集,并将作为第三个列表放入AllValues。

然后不要清除listOfValues2。稍后创建新的LinkedList并将其分配给listOfValues2变量。您对原始listOfValues2所做的任何更改也将在allValues中进行,因为listOfValues2allValues的第二个元素共享对象列表的相同引用。

答案 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打印为空。