System.arraycopy()方法与参数数组长度的关系

System.arraycopy()方法的作用:从源数组拷贝指定长度的内容至目的数组。
参数示例:

System.arraycopy(src, srcPos, dest, destPos, length);

测试示例:

public static void main(String args[]){
	byte[] source = "qwertyuiopasdfghjklzxcvbnm".getBytes();
	byte[] line = new line[10];
	long startTime = System.currentTimeMillis();
	for(int i=0;i<100000;i++){
		System.arraycopy(source,i%25,line,0,1);
	}
	long endTime = System.currentTimeMillis();
	System.out.println("Time="+(endTime-startTime)+"ms");
}

运行代码,平均时间在5ms,即使将line数组的长度放大到10000倍甚至10万倍,平均的执行时间还是在5ms左右,所以几乎肯定这个方法的执行应该时不关心目的数组的长度,当然只要大于拷贝的长度就行。

那么跟源数组的长度有没有关系呢?经测试将source数组的长度放大到10000倍甚至10万倍,平均的执行时间还是在5ms左右,所以跟源数组的长度也没有关系,那么唯一能影响运行时间的应该就是复制的长度了。
写个测试代码试试看:

public static void main(Stirng args[]){
	byte[] temp = "qwertyuiopasdfghjklmnbvcxz".getBytes();
	byte[] source = new byte[1000000];
	for(int i=0;i<source.length;i++){
		source[i]=temp[i%25];
	}
	byte[] line = new byte[1000000];
	long startTime = System.currentTimeMillis();
	for(int i=0;i<100000;i++){
		System.arraycopy(source, i, line, 0, source.length-i);
	}
	long endTime = System.currentTimeMillis();
	System.out.println("Time="+(endTime-startTime)+"ms");
}

运行一下,平均时间在5500ms左右,别忘了上面的运行时间都是基于10万次的结果,所以System.arraycopy()方法对于数组的复制时特别高效的,唯一能影响效率的因素就是需要复制的长度,而源数组和目的数组的长度则无影响,长度越长的数组复制该方法就越能体现出优势。
JDK源码:

public static native void arraycopy(Object src,  int  srcPos,  Object dest, int destPos, int length);

native表示调用的本地方法,应该是JVM内部通过低级语言来实现的一个固有方法。

菜鸟手书,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值