今天我看了一下数组的拷贝,网上都是说拷贝效率对比System.arraycopy()>Arrays.copyOf>clone>for但我实验了之后结果并不是这样,我想知道为什么会造成这样的原因?代码:publicstaticvoidtestSystemArrayCopy(int[]orginal){longstart_time=System.nanoTime();int[]target=newint[orginal.length];System.arraycopy(orginal,0,target,0,target.length);longend_time=System.nanoTime();System.out.println("使用System.arraycopy方法耗时:"+(end_time-start_time));}publicstaticvoidtestArraysCopyOf(int[]orginal){longstart_time=System.nanoTime();int[]target=Arrays.copyOf(orginal,orginal.length);longend_time=System.nanoTime();System.out.println("使用Arrays.copyOf方法耗时:"+(end_time-start_time));}publicstaticvoidtestClone(int[]orginal){longstart_time=System.nanoTime();int[]target=orginal.clone();longend_time=System.nanoTime();System.out.println("使用clone方法耗时:"+(end_time-start_time));}publicstaticvoidtestFor(int[]orginal){longstart_time=System.nanoTime();int[]target=newint[orginal.length];for(inti=0;itarget[i]=orginal[i]; }longend_time=System.nanoTime();System.out.println("使用for循环耗时:"+(end_time-start_time));}publicstaticvoidmain(Stringargs[]){//需要改变原始数组的大小int[]original=newint[10000000];for(inti=0;ioriginal[i]=i; }System.out.println("原始数组的大小:"+original.length);testSystemArrayCopy(original);testArraysCopyOf(original);testClone(original);testFor(original);}结果:原始数组的大小:100使用System.arraycopy方法耗时:8400使用Arrays.copyOf方法耗时:52100使用clone方法耗时:6000使用for循环耗时:3100for>clone>System.arraycopy>Arrays.copyOf======================原始数组的大小:10000使用System.arraycopy方法耗时:42200使用Arrays.copyOf方法耗时:123900使用clone方法耗时:33700使用for循环耗时:249200clone>System.arraycopy>Arrays.copyOf>for=======================原始数组的大小:1000000使用System.arraycopy方法耗时:3874700使用Arrays.copyOf方法耗时:3174500使用clone方法耗时:2867300使用for循环耗时:6705100clone>Arrays.copyOf>System.arraycopy>for=======================原始数组的大小:100000000使用System.arraycopy方法耗时:242847700使用Arrays.copyOf方法耗时:242949100使用clone方法耗时:394861500使用for循环耗时:136803300for>System.arraycopy≈Arrays.copyOf>clone实验结果表明:当数组大小比较小的时候for循环的效率最高,完胜其他方法的效率当数组大小在1W-100W的时候clone效率最高,System.arraycopy也不差,for循环的效率比较糟糕当数组大小比较大的时候,1亿for循环效率最高,clone效率最慢我的问题:为什么的我结论和网上不一样,以及造成这样的原因
幕布斯6054654
相关分类