JAVA - 数组复制

以下数组复制方法均为对对象数组的浅拷贝!

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:要复制的数组元素的数量

srcdes都必须是同类型或者可以进行转换类型的数组

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<a.length; i++)
{
    b[i]=a[i].clone();
} 

效率:System.arraycopy > Arrays.copyOf > for循环 > clone






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值