因此,我正在创建一种将一组数字进行混洗的方法,其想法是创建一组这些数字。
因此,我创建了一个循环,将数字打乱,然后将其添加到arraylist中,但是在进行一些调试语句后,我发现它确实对数字进行了混编,但仅将最后一个混编添加到arrayList中。谁能帮我找出原因?

solutionList是一个数组列表,如果有人在想的话,代码会更进一步

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));
    }

最佳答案

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 });
}

07-24 15:15