您的位置:首页 >在Java中如何复制一个集合_Java集合拷贝方式解析
发布于2026-03-01 阅读(0)
扫一扫,手机访问
最常用且安全的浅拷贝方式是用构造方法:new ArrayList(originalList) 或 new LinkedList(originalList),但需注意判空、类型适配及不可变集合的“假拷贝”风险。

大多数时候,你只需要一个浅拷贝——新集合和原集合元素引用相同,但集合容器本身独立。这时候最简单的方式就是用目标集合的构造方法传入原集合:
new ArrayList<>(originalList) 是最常用、最安全的写法,适用于任何 Collection 子类new LinkedList<>(originalList) 同理,但注意它内部是链表结构,随机访问性能差,别只因“想复制”就盲目换类型originalList 是 null,会抛 NullPointerException,务必提前判空或用 Objects.requireNonNullCollections.copy() 不创建新集合,而是把源集合元素逐个赋值到目标集合已有位置。它要求目标集合长度 ≥ 源集合长度,否则抛 IndexOutOfBoundsException:
List dest = new ArrayList<>(Collections.nCopies(src.size(), null)) dest 原来有 10 个元素,只复制了前 5 个,后 5 个保留原值构造方法只复制引用,若集合里存的是可变对象(如 HashMap、自定义 POJO),修改副本里的对象仍会影响原集合中的对应对象:
list.stream().map(item -> item.clone()).collect(Collectors.toList()),前提是 item 实现了 Cloneable 且重写了 clone()ObjectOutputStream + ByteArrayInputStream),但要求所有元素都实现 Serializable,且注意 transient 字段不会被复制Date)需额外配置如果你用的是 ImmutableList.copyOf()(Guava)或 List.of()(Java 9+),它们返回的是不可变视图,底层可能共享引用:
ImmutableList.copyOf(original) 如果 original 本身已是不可变实现,可能直接返回它,而非新建对象List.copyOf()(Java 10+)也是类似逻辑:若参数已是不可变 List,则不复制;否则才新建== 可能为 true——调试时容易误判真正要复制集合,先想清楚:要的是容器独立?还是元素也隔离?是否允许 null?有没有并发修改风险?这些细节比“怎么写一行代码”更重要。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9