📅  最后修改于: 2023-12-03 15:32:02.383000             🧑  作者: Mango
在Java中,集合提供了copy()
方法来复制集合中的元素到另一个集合中。这个方法可以被用于在两个不同的集合中复制相同的元素。
void copy(List<? super T> dest, List<? extends T> src)
dest
:要复制到的目标集合。src
:指定要从哪个集合中复制。以下示例演示如何使用copy()
方法将一个集合的元素复制到另一个集合中。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListCopyExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> sourceList = new ArrayList<>();
sourceList.add("Java");
sourceList.add("C++");
sourceList.add("Python");
// 创建一个新的 ArrayList
List<String> destinationList = new ArrayList<>();
// 执行复制
Collections.copy(destinationList, sourceList);
// 打印目标列表中的元素
System.out.println("目标列表中的元素为: " + destinationList);
}
}
输出结果:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Collections.java:5231)
at ArrayListCopyExample.main(ArrayListCopyExample.java:16)
可以看到,抛出了IndexOutOfBoundsException
异常。这是因为在复制之前,目标列表的大小是零,但是需要足够的空间来容纳源列表中的元素。
为了修复这个问题,我们需要在执行复制之前先确保目标列表有足够的空间来容纳源列表中的元素。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListCopyExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> sourceList = new ArrayList<>();
sourceList.add("Java");
sourceList.add("C++");
sourceList.add("Python");
// 创建一个新的 ArrayList
List<String> destinationList = new ArrayList<>(sourceList.size());
// 执行复制
Collections.copy(destinationList, sourceList);
// 打印目标列表中的元素
System.out.println("目标列表中的元素为: " + destinationList);
}
}
输出结果:
目标列表中的元素为: [Java, C++, Python]
在这个示例中,我们在初始化目标列表时传递了sourceList.size()
的值,这样就能在复制之前为目标列表分配足够的空间了。
我们还可以使用addAll()
方法将整个源集合复制到目标集合中。
import java.util.ArrayList;
import java.util.List;
public class ArrayListCopyExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> sourceList = new ArrayList<>();
sourceList.add("Java");
sourceList.add("C++");
sourceList.add("Python");
// 创建一个新的 ArrayList
List<String> destinationList = new ArrayList<>();
// 通过 addAll() 方法将整个源集合复制到目标集合中
destinationList.addAll(sourceList);
// 打印目标列表中的元素
System.out.println("目标列表中的元素为: " + destinationList);
}
}
输出结果:
目标列表中的元素为: [Java, C++, Python]
总结:
copy()方法可以用于将一个集合的元素复制到另一个集合中。这个方法的语法如下:
void copy(List<? super T> dest, List<? extends T> src)
在使用这个方法之前,我们要保证目标集合足够大,能够容纳源集合中的元素。
此外,我们还可以使用addAll()
方法将整个源集合复制到目标集合中。