四中copy数组方法的效率比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四中copy数组方法的效率比较相关的知识,希望对你有一定的参考价值。
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
以上是关于四中copy数组方法的效率比较的主要内容,如果未能解决你的问题,请参考以下文章