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
相关产品推荐
相关产品推荐

