list复制_Java中如何复制List (5种方法)

1. 利用构造器Constructor

复制一个List的简单方法是使用以一个集合作为参数的构造函数:

package net.javaguides.examples;import java.util.ArrayList;import java.util.List;/** * Different ways to copy a list into another list *  * @author Noseparte * */public class CopyListExamples {    public static void main(String[] args) {        List < String > fruits = new ArrayList < > ();        // Adding new elements to the ArrayList        fruits.add("Banana");        fruits.add("Apple");        fruits.add("mango");        fruits.add("orange");        System.out.println(fruits);        // using constructor        List < String > copyFruits = new ArrayList < > (fruits);        System.out.println(copyFruits);    }}

Output:

[Banana, Apple, mango, orange][Banana, Apple, mango, orange]

这种方法并不是线程安全的。我们可能会得到ConcurrentAccessException错误,为了解决这个问题,我们可能需要使用CopyOnWriteArrayList,在这个方法中,所有的突变操作都是通过对底层数组进行重新复制来实现的。

2. 使用 addAll() method

另一种复制元素的方法是使用addAll()方法:

package net.javaguides.examples;import java.util.ArrayList;import java.util.List;/** * Different ways to copy a list into another list *  * @author Noseparte * */public class CopyListExamples {    public static void main(String[] args) {        List < String > fruits = new ArrayList < > ();        // Adding new elements to the ArrayList        fruits.add("Banana");        fruits.add("Apple");        fruits.add("mango");        fruits.add("orange");        System.out.println(fruits);        // using the addAll method        List < String > copy = new ArrayList < > ();        copy.addAll(fruits);        System.out.println(copy);    }}

Output:

[Banana, Apple, mango, orange][Banana, Apple, mango, orange]

3. 使用 Collections.copy() method

[Collections]类完全由操作或返回集合的静态方法组成。

其中一个是copy()方法,它需要一个源列表和一个至少和源列表一样长的目标列表。

该方法将源列表中的所有元素复制到目的列表中。复制后,源列表和目的列表中的元素的索引将是相同的。

目的列表必须足够长,以容纳所有复制的元素。如果它长于此,目标列表中的其余元素将不受影响。

package net.javaguides.examples;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * Different ways to copy a list into another list *  * @author Ramesh Fadatare * */public class CopyListExamples {    public static void main(String[] args) {        List < String > fruits1 = new ArrayList < > ();        // Adding new elements to the ArrayList        fruits1.add("Banana");        fruits1.add("Apple");        fruits1.add("mango");        fruits1.add("orange");        System.out.println(fruits1);        // using the Collections.copy() method        List < String > fruits2 = new ArrayList < > (fruits1.size());        fruits2.add("1");        fruits2.add("2");        fruits2.add("3");        fruits2.add("4");        Collections.copy(fruits2, fruits1);        System.out.println(fruits2);    }}

Output:

[Banana, Apple, mango, orange][Banana, Apple, mango, orange]

4. 在 Java 8 中的使用方式

使用Java 8 Stream APIsList复制到另一个List中 :

package net.javaguides.examples;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/** * Different ways to copy a list into another list *  * @author Noseparte * */public class CopyListExamples {    public static void main(String[] args) {        List < String > fruits = new ArrayList < > ();        // Adding new elements to the ArrayList        fruits.add("Banana");        fruits.add("Apple");        fruits.add("mango");        fruits.add("orange");        System.out.println(fruits);        // using Java 8 Stream APIs        List < String > copy = fruits.stream()            .collect(Collectors.toList());        System.out.println(copy);    }}

Output:

[Banana, Apple, mango, orange][Banana, Apple, mango, orange]

5. 在JDK10中的使用方式

最后,最后一个Java版本允许我们创建一个包含给定Collection元素的不可变列表:

package net.javaguides.examples;import java.util.ArrayList;import java.util.List;/** * Different ways to copy a list into another list *  * @author Noseparte * */public class CopyListExamples {    public static void main(String[] args) {        List < String > fruits = new ArrayList < > ();        // Adding new elements to the ArrayList        fruits.add("Banana");        fruits.add("Apple");        fruits.add("mango");        fruits.add("orange");        System.out.println(fruits);        // using Java 8 copyOf() method        List < String > copy = List.copyOf(fruits);        System.out.println(copy);    }}

Output:

[Banana, Apple, mango, orange][Banana, Apple, mango, orange]

总结

在本文中,我们已经探讨了5种不同的方法来将一个List复制到另一个的List中以及不同Java版本。

fee35ee288b822844514b4ed0dd288a2.png

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值