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

Java中ArrayList<ArrayList<String>>的拷贝构造函数无法正常工作

解决ArrayList<ArrayList>的深拷贝问题

你当前使用的new ArrayList<>(origSorted)或者clone()都是浅拷贝——它们只会复制外层ArrayList的容器结构,容器内的每个ArrayList<String>子列表,依然和原列表origSorted中的子列表指向同一个内存对象。所以当你修改copySorted里的子列表元素时,原列表的对应子列表也会同步变化。

要实现完全独立的拷贝(深拷贝),需要手动遍历并复制每一层的元素:

方案1:循环遍历拷贝子列表

ArrayList<ArrayList<String>> copySorted = new ArrayList<>();
for (ArrayList<String> subList : origSorted) {
    // 为每个子列表创建新的ArrayList实例,复制其元素
    copySorted.add(new ArrayList<>(subList));
}

方案2:用Java流简化代码(Java 8及以上)

ArrayList<ArrayList<String>> copySorted = origSorted.stream()
    .map(ArrayList::new) // 对流中每个子列表执行拷贝
    .collect(Collectors.toCollection(ArrayList::new));

完成上述操作后,copySorted和origSorted就完全独立了,修改任意一方的子列表或内部元素,都不会影响另一方。

内容的提问来源于stack exchange,提问作者Connor Rasmussen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:54:22