You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:24:56