Java之复制数组的四种方式总结
1. 使用Arrays类的copyOf函数
该函数的函数签名如下:
T[] copyOf(T[] src, int length)
复制src数组到一个新的数组,新数组的长度为length,如果length > src.length, 则新数组后面多出的空间将用这一种数据类型的默认值填充,如int填充0,如果小于,则截断后面一部分。
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] src = {0, 1 , 2, 3, 4};
int[] des = Arrays.copyOf(src, 5);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
des = Arrays.copyOf(src, 7);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
des = Arrays.copyOf(src, 3);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
//输出为: 0 1 2 3 4
//0 1 2 3 4 0 0
//0 1 2
}
}
2. 使用Arrays类的copyOfRange方法
该函数的签名如下:
T[] copyOfRange(T[] src, int begin, int end)
复制src数组中索引从begin到end的元素到返回数组中,包括begin,不包括end。如果end超出了src数组的范围,则结果数组中的多余空间会用默认值填充。
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] src = {0, 1 , 2, 3, 4};
int[] des = Arrays.copyOfRange(src, 0, 5);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
des = Arrays.copyOfRange(src, 1, 7);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
des = Arrays.copyOfRange(src, 3, 5);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
//输出为:0 1 2 3 4
//1 2 3 4 0 0
//3 4
}
}
3. 使用System类的arraycopy方法
该函数的方法签名如下:void arraycopy(T[] src, int begin, T[] des, int des_begin, int length)
将src数组从索引begin开始的地方开始复制到des数组的des_begin开始处,一共复制length长度。
public class Main {
public static void main(String[] args) {
int[] src = {0, 1 , 2, 3, 4};
int[] des = new int[8];
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
System.arraycopy(src, 1, des, 3, 4);
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
//输出为:0 0 0 0 0 0 0 0
//0 0 0 1 2 3 4 0
}
}
4.使用Object类的clone方法
该函数的方法签名如下:
Object[] clone();
clone方法复制得到的是Object类型的数组,需要强制转型
public class Main {
public static void main(String[] args) {
int[] src = {0, 1 , 2, 3, 4};
int[] des = (int[])src.clone();
for (int i = 0; i < des.length; i++) {
System.out.print(des[i] + " ");
}
System.out.println("");
//输出为:0 1 2 3 4
}
}