Java中copy数组的方法有四种。第一种是Object类提供的clone( )方法,第二种是java.lang.System类提供的arrayCopy( )方法,第三种是java.util.Arrays类提供的copyOf( )方法,最后一种也就是最常见的使用for循环实现数组的copy。四中执行方法由于内部实现不同当然有不同的执行效率。参考下面代码的运行结果(由于用到了相同的业务逻辑所以使用了动态代理)
代理类:
package com.zly.test;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class Agent implements InvocationHandler{ private ArrayCopyMethodCompareInterface acmc1= new ArrayCopyMethodCompare1(); public ArrayCopyMethodCompareInterface getAcmc1() { return acmc1; } public void setAcmc1(ArrayCopyMethodCompareInterface acmc1) { this.acmc1 = acmc1; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long startTime = System.currentTimeMillis(); method.invoke(acmc1, args); long endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); return null; }}
被代理接口:
package com.zly.test;import java.lang.reflect.Proxy;import java.util.Arrays;public interface ArrayCopyMethodCompareInterface {public void system_arraycopy();public void for_copy();public void clone_copy();public void arrays_copyof();}
被代理接口实现类:
package com.zly.test;import java.lang.reflect.Proxy;import java.util.Arrays;public class ArrayCopyMethodCompare1 implements ArrayCopyMethodCompareInterface{ public static int[] a = new int[2000000]; public int[] b = new int[a.length]; public static void main(String[] args) { for(int i=0;i
通过对以上代码的运行,虽然每次运行结果不稳定,但总体可以得出以下结论:
System.arrayCopy()(7毫秒)>clone()(16毫秒)>Arrays.copyOf()(18毫秒)>for循环(20毫秒)