Bootstrap

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

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;