生活随笔
收集整理的這篇文章主要介紹了
关于java数组拷贝的性能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java 提供的System.arrayCopy()方法比自己寫的數組copy要快.
查看其源代碼:
public?static?native?void?arraycopy(Object?src,??int??srcPos,????????????????????????????????????????Object?dest,?int?destPos,????????????????????????????????????????int?length); 可以看到被定義為native方法...速度比自己寫的普通方法要快.
?
在jdk1.6中加入了新的數組拷貝方法.Arrays.copyOfRange().
其源代碼:
?public?static?byte[]?copyOfRange(byte[]?original,?int?from,?int?to)?{????????int?newLength?=?to?-?from;????????if?(newLength?<?0)????????????throw?new?IllegalArgumentException(from?+?"?>?"?+?to);????????byte[]?copy?=?new?byte[newLength];????????System.arraycopy(original,?from,?copy,?0,?????????????????????????Math.min(original.length?-?from,?newLength));????????return?copy;????} ?
其實就是System.arraycopy..暈死.
?
別為做的測試:
public?final?class?WhoFaster{??public?static?void?main(?String[]?args?)??{????????int?begin=100;?????int?length=120;?????String?temp="12345678901234567890"???????????????+"12345678901234567890"???????????????+"12345678901234567890"???????????????+"12345678901234567890"???????????????+"12345678901234567890"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"黑客帝國忍者神龜變形金剛"???????????????+"12345678901234567890"???????????????+"12345678901234567890"???????????????+"12345678901234567890"???????????????+"12345678901234567890"???????????????+"12345678901234567890";?????int?times=1000000;??????????char[]?oldArray=temp.toCharArray();?????char[]?newArray=null;?????long?start=0L;?????????????????????????newArray=new?char[length];?????start=System.currentTimeMillis();?????for(?int?i=0;?i<times;?i++?)???????{?????????for(?int?j=0;?j<length;?j++?)????????????{??????????????newArray[j]=oldArray[begin+j];????????????}???????}?????System.out.println(?new?String(?newArray?)+" "+(?System.currentTimeMillis()-start?)?);?????????????????????????newArray=new?char[length];?????start=System.currentTimeMillis();?????for(?int?i=0;?i<times;?i++?)???????{?????????System.arraycopy(?oldArray,?begin,?newArray,?0,?length?);???????}?????System.out.println(?new?String(?newArray?)+" "+(?System.currentTimeMillis()-start?)?);??}}? ?
其結論:
在第一種情況,循環千萬,一個900,一個1000,兩者相差100毫秒
第二種情況就拉大了,循環千萬,一個6700,一個2200,相差4500毫秒
為防止JVM將字符數組作為常量保存在內存中,我分別屏蔽運行,效果一樣。
也就是說,對于很短的字符串復制,單純賦值略快,可以忽略
對于很長的字符串復制,用單純賦值就是臟代碼
總結
以上是生活随笔為你收集整理的关于java数组拷贝的性能的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。