【java】方法--拷贝数组
在 Java 中,拷贝数组 是指将一个数组的内容复制到另一个数组中。数组拷贝可以分为 浅拷贝 和 深拷贝,具体取决于数组元素的类型(基本数据类型或引用数据类型)。以下是几种常见的数组拷贝方法:
1. 使用 for
循环手动拷贝
这是最基础的方法,通过遍历原数组,将每个元素复制到新数组中。
示例:
java
Copy
public class Main { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; int[] copy = new int[original.length]; // 使用 for 循环拷贝数组 for (int i = 0; i < original.length; i++) { copy[i] = original[i]; } // 打印拷贝后的数组 for (int num : copy) { System.out.print(num + " "); } } }
-
输出结果:
Copy
1 2 3 4 5
-
特点:
-
适用于基本数据类型数组和引用数据类型数组。
-
对于引用数据类型数组,拷贝的是引用(浅拷贝)。
-
2. 使用 System.arraycopy()
方法
System.arraycopy()
是 Java 提供的一个高效数组拷贝方法。
语法:
java
Copy
System.arraycopy(原数组, 原数组起始位置, 目标数组, 目标数组起始位置, 拷贝长度);
示例:
java
Copy
public class Main { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; int[] copy = new int[original.length]; // 使用 System.arraycopy 拷贝数组 System.arraycopy(original, 0, copy, 0, original.length); // 打印拷贝后的数组 for (int num : copy) { System.out.print(num + " "); } } }
-
输出结果:
Copy
1 2 3 4 5
-
特点:
-
高效,底层是 native 方法。
-
适用于基本数据类型数组和引用数据类型数组。
-
对于引用数据类型数组,拷贝的是引用(浅拷贝)。
-
3. 使用 Arrays.copyOf()
方法
Arrays.copyOf()
是 Java 提供的一个简便的数组拷贝方法。
语法:
java
Copy
目标数组 = Arrays.copyOf(原数组, 新数组长度);
示例:
java
Copy
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; // 使用 Arrays.copyOf 拷贝数组 int[] copy = Arrays.copyOf(original, original.length); // 打印拷贝后的数组 for (int num : copy) { System.out.print(num + " "); } } }
-
输出结果:
Copy
1 2 3 4 5
-
特点:
-
简洁易用。
-
适用于基本数据类型数组和引用数据类型数组。
-
对于引用数据类型数组,拷贝的是引用(浅拷贝)。
-
4. 使用 clone()
方法
Java 中的数组是对象,因此可以使用 clone()
方法来拷贝数组。
示例:
java
Copy
public class Main { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; // 使用 clone 方法拷贝数组 int[] copy = original.clone(); // 打印拷贝后的数组 for (int num : copy) { System.out.print(num + " "); } } }
-
输出结果:
Copy
1 2 3 4 5
-
特点:
-
简单易用。
-
适用于基本数据类型数组和引用数据类型数组。
-
对于引用数据类型数组,拷贝的是引用(浅拷贝)。
-
5. 深拷贝与浅拷贝
-
浅拷贝:只拷贝数组的引用,新数组和原数组共享相同的元素(适用于基本数据类型数组)。
-
深拷贝:拷贝数组的所有元素,包括引用数据类型数组中的对象(需要手动实现)。
深拷贝示例:
java
Copy
class Person implements Cloneable { String name; Person(String name) { this.name = name; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class Main { public static void main(String[] args) throws CloneNotSupportedException { Person[] original = {new Person("Alice"), new Person("Bob")}; Person[] copy = new Person[original.length]; // 深拷贝 for (int i = 0; i < original.length; i++) { copy[i] = (Person) original[i].clone(); } // 修改原数组中的对象 original[0].name = "Charlie"; // 打印拷贝后的数组 for (Person person : copy) { System.out.println(person.name); } } }
-
输出结果:
Copy
Alice Bob
-
特点:
-
深拷贝后,修改原数组中的对象不会影响新数组。
-
6. 总结
-
浅拷贝:适用于基本数据类型数组,或引用数据类型数组的引用拷贝。
-
深拷贝:适用于引用数据类型数组,需要手动实现。
-
常用方法:
-
for
循环:灵活,适用于所有场景。 -
System.arraycopy()
:高效,推荐使用。 -
Arrays.copyOf()
:简洁易用。 -
clone()
:简单,但需要实现Cloneable
接口。
-