以下数组复制方法均为对对象数组的浅拷贝!
1 for循环逐一复制
使用for循环,将数组的每个元素复制或者复制指定元素;代码灵活,但需注意数组越界异常;效率低
int[] array1 = {1,2,3,4,5};
int[] array2 = new int[5];
for(int i = 0;i < array1.length;i++)
{
array2[i] = array1[i];
}
2 System.arraycopy
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
从原数组中的第srcPos个位置起复制length个元素到目标数组的第destPos个位置
src:源数组
srcPos:源数组中的起始位置
dest:目标数组
destPos:目标数据中的起始位置
length:要复制的数组元素的数量
注:src和des都必须是同类型或者可以进行转换类型的数组
int[] array1 = {1,2,3,4,5};
int[] array2 = {11,12,13,14,15,16};
System.arraycopy(array1, 1, array2, 2, 3);
3 Arrays.copyOf
public static int[] copyOf(int[] original, int newLength);
复制指定的数组,返回原数组的副本
original:源数组,可以为byte,short,int,long,char,float,double,boolean
newLength:新数组的长度
int[] array1 = {1,2,3,4,5};
int[] array2 = new int[3];
array2 = Arrays.copyOf(array1, 3);
其实现基于System.arraycopy(),所以效率低于System.arraycopy()
4 Arrays.copyOfRange
public static int[] copyOfRange(int[] original, int from, int to);
复制原数组original的指定部分(从from到(to-1)位),返回原数组的副本
original:源数组,可以为byte,short,int,long,char,float,double,boolean
from:源数组被复制的起始位置
to: 源数组被复制的中止位置(不包括to本身)
其实现基于System.arraycopy(),所以效率低于System.arraycopy()
int[] array1 = {1,2,3,4,5};
int[] array2 = new int[3];
array2 = Arrays.copyOfRange(array1, 2, 5);
5 clone的用法
clone()方法不单的将一个数组引用赋值为另外一个数组引用,而是创建一个新的数组。但是我们知道,对于数组本身而言,当它的元素是对象时,本来数组每个元素中保存的就是对象的引用,所以拷贝过来的数组自然而言也是对象的引用,所以对于数组对象元素而言,clone()方法是浅拷贝
注:使用clone方法,得返回值类型为Object类型,所以赋值时将发生强转,因此效率较低
int[] array1 = {1,2,3,4,5};
int[] array2;
array2 = array1.clone();
clone()方法只能直接复制一维数组,对于二维数组的复制,要在每一维上调用clone函数
int[][] a={{3, 1, 4, 2, 5}, {4, 2}};
int[][] b=new int[a.length][];
for(int i=0; i
效率:System.arraycopy > Arrays.copyOf > for循环 > clone