Javacopy数组的方法有四种。第一种是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

spacer.gif通过对以上代码的运行,虽然每次运行结果不稳定,但总体可以得出以下结论:

System.arrayCopy()7毫秒)>clone()16毫秒)>Arrays.copyOf()18毫秒)>for循环(20毫秒)