【发布时间】:2021-02-16 19:28:10
【问题描述】:
我正在尝试将数组添加到 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);
}
【问题讨论】:
-
将值复制到新数组中。
-
Sheesh 艰难的人群。这行得通,但我不明白为什么我需要这样做。
-
如果你不创建一个新数组,你将在列表中添加对同一个数组的引用(所以它们都具有相同的值)。
-
啊有趣。猜猜这只是 ArrayList 节省一些时间的一种方式?第一个数组被缓存了,所以每次我们添加它时,同一个数组都会被重用?
-
它不是缓存。 ArrayList 保存对其中对象的引用。