ArrayList元素修改异常:修改首元素时次元素同步变更的解决方法
问题解决:ArrayList修改元素导致其他元素同步变化
你的代码里出现的问题核心原因是:ArrayList存储的是int数组的引用,而非数组本身。
当执行col.set(i, col.get(i-1))时,你只是把前一个位置的数组引用复制到当前位置,这就导致col.get(0)和col.get(1)指向了同一个int数组对象。所以修改col.get(0)[0]时,第二个元素对应的数组也会同步变化。
要解决这个问题,你需要在赋值时复制数组元素到新数组,让每个位置的元素指向独立的数组对象,修改后的代码如下:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<int[]> col = new ArrayList<>(List.of(new int[]{11, 122}, new int[]{92, 324}, new int[]{24, 56})); for (int i = col.size() - 1; i != 0; i--) { int[] prevArr = col.get(i-1); // 复制原数组元素到新数组,避免引用共享 col.set(i, Arrays.copyOf(prevArr, prevArr.length)); } col.get(0)[0] -= 32; // 打印验证结果 for (int[] arr : col) { System.out.println(Arrays.toString(arr)); } } }
这段代码使用Arrays.copyOf创建新数组并复制原数组的所有元素,确保每个List元素都指向独立的数组实例。此时修改第一个数组的元素,其他位置的数组不会受到影响,最终输出会符合你的预期:[-21, 122]、[11, 122]、[92, 324]。
内容的提问来源于stack exchange,提问作者Lipe
相关产品推荐
相关产品推荐

