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内部通过低级语言来实现的一个固有方法。
菜鸟手书,欢迎指正!