Java ArrayList填充

时间:2012-06-25 16:31:27

标签: java multidimensional-array arraylist

所以我正在创建一个方法来改组一组数字,我的想法是创建这些数字的总体。 所以我创建了一个循环,它将数字混合,然后将它添加到一个arraylist,但是在一些调试语句后,我发现它确实对数字进行了洗牌,但只是将最后一个shuffle添加到了arrayList。任何人都可以帮我找出原因吗?

如果有人想知道

,那么解决方案列表是代码中的一个arraylist
for(int k =0;k <100; k++){
        Collections.shuffle(solutionList);
        population2.add(new Object[]{solutionList}) ;
        System.out.println("In the loop  " + solutionList);

    }

    for(Object[] row : population2){
        System.out.println("Row = " + Arrays.toString(row));
    }

3 个答案:

答案 0 :(得分:9)

population2的每个元素都是一个数组,其中引用了相同的 ArrayList。如果需要不同的列表,则需要为每次迭代创建一个新列表。

例如,为了避免每次使用正确的数字填充列表,您可以随意添加solutionList,然后添加对副本的引用:

for (int k = 0; k < 100; k++) {
    Collections.shuffle(solutionList);
    List<Integer> copy = new ArrayList<Integer>(solutionList);
    population2.add(new Object[]{ copy });
}

答案 1 :(得分:3)

population2.add(new Object[]{solutionList}) ;

创建一个包含单个元素的Object数组。该元素恰好是一个列表。

答案 2 :(得分:2)

您正在创建100个数组,每个数组都包含对同一列表的引用。我想你想要的是创建100个数组,每个数组都包含列表元素的副本:

for(int k =0;k <100; k++){
    Collections.shuffle(solutionList);
    population2.add(solutionList.toArray()) ;
}

但我建议完全避免使用数组,并且总是使用集合:

for(int k =0;k <100; k++){
    Collections.shuffle(solutionList);
    population2.add(new ArrayList<Something>(solutionList));
}