我正在尝试将数组添加到ArrayList
中,以检查它们是否曾经被看到过。当我将一个数组添加到列表中时,我也想将同一数组的所有其他“循环”版本也添加到列表中。但是,当我尝试更改数组的值然后添加到列表(以下代码)时,ArrayList
仅填充了原始数组的副本。
for (int k = 0; k < 12; k++) {
int temp = values[0];
for (int j = 0; j < 11; j++) {
values[j] = values[j + 1];
}
values[11] = temp;
seen.add(values);
}
答案 0 :(得分:2)
您只有一个数组变量values
,可以在循环的每次迭代中进行修改。当您将对象添加到(Array)List时,它不会被复制-对其的引用仅存储在列表中。因此,当您继续修改同一对象时,从列表访问该对象时,这些更改也将可见。
相反,您应该在循环的每次迭代中创建一个新数组,并将不同的对象添加到列表中:
for (int k = 0; k < 12; k++) {
int[] temp = new int[12];
for (int j = 0; j < 12; j++) {
temp[j] = values[(j + 1) % 12];
}
seen.add(temp);
}