1. 程式人生 > >java陣列複製的效率

java陣列複製的效率

使用clone方法
 A、for迴圈的話,很靈活,但是程式碼不夠簡潔.     B、System.arraycopy()原始碼。可以看到是native方法:native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前檔案,而是在用其他語言(如C和C++)實現的檔案中。 可以將native方法比作Java程式同C程式的介面。
public static native void arraycopy(Object src,  int  srcPos,
           Object dest, int destPos,int length); 
    C、選項有誤,copyOf不是System的方法,而是Arrays的方法,下面是原始碼,可以看到本質上是呼叫的arraycopy方法。
,那麼其效率必然是比不上 arraycopy的
1 2 3 4 5 6 public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
 D。clone的話,返回的是Object【】,需要強制轉換。 一般用clone效率是最差的,
        CD可以排除。那麼AB怎麼比較呢?         給出一下參考的:             http://bbs.csdn.net/topics/370151185。 具體的理由不好說。不過一致的說法和實驗證明是arraycopy()效率高!!!T...T
首先:Sytem.copyOf有這個?我只知道是Arrays.copyOf 結論: 效率:System.arraycopy > clone > Arrays.copyOf > for迴圈
理由: A:for迴圈,效率最低,隨便寫個程式驗證一下,效率慢的不是一點.....我測試的時候比clone和System.arraycopy差了100多倍 B:System.arraycopy:原型是 public static native void arraycopy(Object src,  int  srcPos , Object dest, int destPos, int length); C:Arrays.copyOf底層呼叫了上面的System.copyOf效率比上面兩個低。 D:clone()的完整定義:protected native Object clone() throws CloneNotSupportedException; 高票答案說的clone()返回的是Object型別,其實是錯誤的,只有Object[]陣列的clone()方法才返回Object型別,子類重寫了父類的方法。
其實,一般情況下,前三個的效率差別幾乎忽略不計,但是從Arrays.copyOf底層呼叫的System.arraycopy效率自然要低一些。 而clone()和arraycopy只是從實驗的結果來看是arraycopy的效率高。