标签:java 数组
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<a.length;i++) {
a[i]=i+1;
}
ArrayCopyMethodCompareInterface acmc = new ArrayCopyMethodCompare1();
Agent a = new Agent();
a.setAcmc1(acmc);
ArrayCopyMethodCompareInterface arrayCopyMethodCompareProxy = (ArrayCopyMethodCompareInterface)Proxy.
newProxyInstance(acmc.getClass().getClassLoader(),new Class[]{ArrayCopyMethodCompareInterface.class}, a);
arrayCopyMethodCompareProxy.clone_copy();
/*arrayCopyMethodCompareProxy.for_copy();
arrayCopyMethodCompareProxy.system_arraycopy();
arrayCopyMethodCompareProxy.arrays_copyof();*/
}
public void system_arraycopy() {
System.arraycopy(a, 0, b, 0, a.length);
b=null;
}
public void for_copy() {
for(int i=0;i<a.length-1;i++) {
b[i]=a[i];
}
b=null;
}
public void clone_copy() {
b=a.clone();
b=null;
}
public void arrays_copyof() {
b=Arrays.copyOf(a, a.length);
b=null;
}
}
通过对以上代码的运行,虽然每次运行结果不稳定,但总体可以得出以下结论:
System.arrayCopy()(7毫秒)>clone()(16毫秒)>Arrays.copyOf()(18毫秒)>for循环(20毫秒)
本文出自 “java” 博客,请务必保留此出处http://a001807.blog.51cto.com/9804844/1905265
标签:java 数组
原文地址:http://a001807.blog.51cto.com/9804844/1905265