【Java】数组拷贝的四种方法
生活随笔
收集整理的這篇文章主要介紹了
【Java】数组拷贝的四种方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
四種方法
System.arraycopy()
這是一個native的方法,也是對大數(shù)組最高效的方法。
Arrays.copyOf()
源碼如下:
public static <T> T[] copyOf(T[] original, int newLength) {return copyOf(original, newLength, original.getClass()); }效率基本上一直都比System.arraycopy()差。
arrayObj.clone()
數(shù)組的clone()看不到,不過還是存在clone()的,效果還行吧。
for循環(huán)為數(shù)組逐一賦值
這個在小數(shù)據(jù)量級別既簡單又快速,數(shù)據(jù)量大以后就很慢了。
如何做效率測試
薦讀:獲取Java代碼段運(yùn)行毫秒數(shù)的策略
為什么用String類型的"orzorzorzorz"呢?
因?yàn)樘〉臄?shù)組單元占用空間太少,復(fù)制太簡單;太大還容易爆空間,所以就用這個挺好。
為什么開10_000_000大小的數(shù)組呢?
首先聲明,10_000_000這個寫法,其實(shí)是為了防止位數(shù)太多,看不清楚而有的寫法,是符合Java語法規(guī)范的。
在一個是需要多次使用,使用一個final修飾的常量能更方便調(diào)整數(shù)組大小且保持統(tǒng)一。
10M,也就是1000W,應(yīng)該算比較大的數(shù)組了。我們在不開大虛擬機(jī)空間的情況下,1000W已經(jīng)很大了。開到100W不明顯;開到1億就內(nèi)存爆炸了。
所以隨便開個1000W的數(shù)組吧!
clone()是深拷貝嗎
薦讀:總結(jié)Java數(shù)組的拷貝和輸出
對于一維數(shù)組,確實(shí)能做到深拷貝!
完整代碼
import java.util.Arrays;public class ArrayCopyTest {public static void main(String[] args) {final int LIMIT = 10_000_000;String[] array0 = new String[LIMIT];Arrays.fill(array0, "orzorzorzorz");String[] array = new String[LIMIT];long time1 = System.currentTimeMillis();System.arraycopy(array0, 0, array, 0, LIMIT);long time2 = System.currentTimeMillis();array = Arrays.copyOf(array0, LIMIT);long time3 = System.currentTimeMillis();array = array0.clone();long time4 = System.currentTimeMillis();for (int i = 0; i < LIMIT; i++) {array[i] = array0[i];}long time5 = System.currentTimeMillis();System.out.println("方法一耗時:" + (time2-time1));System.out.println("方法二耗時:" + (time3-time2));System.out.println("方法三耗時:" + (time4-time3));System.out.println("方法四耗時:" + (time5-time4));} }測試結(jié)果例舉
方法一耗時:15 方法二耗時:47 方法三耗時:48 方法四耗時:78其實(shí)這個結(jié)果不唯一啊,我有幾次測試竟然是方法三更快,這個還算比較正常的,嗯。
四種方法的效率總結(jié)
- 原始數(shù)組長度不管是多少的時候,Arrays.copyOf()的效率都比System.arraycopy()差,tcl。
- 原始數(shù)組長度比較小的時候,千以內(nèi)的范圍中,for循環(huán)表現(xiàn)十分優(yōu)異,并隨著數(shù)組長度的增加,效率越來越低,因此,for循環(huán)適合于小型數(shù)組,而且用著真簡單。
- 原始數(shù)組長度中等的時候,萬以內(nèi)的范圍內(nèi),兩個native方法的效率差不多。
- 原始數(shù)組長度比較大的時候,幾萬、幾十萬+乃至更多,這時候native方法System.arraycopy()的優(yōu)勢體現(xiàn)出來了,效率拔群。
- 較大數(shù)據(jù)量的時候四種方法按照效率降序排列:
- No.1: System.arraycopy()
- No.2: Arrays.copyOf()
- No.3: arrayObj.clone()
- No.4: for循環(huán)為數(shù)組逐一賦值
總結(jié)
以上是生活随笔為你收集整理的【Java】数组拷贝的四种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据结构与算法】红黑树的Java实现
- 下一篇: 【Java】Maven报错 Depend