Arrays.copyOf的深入了解


1、Arrays.copyof是什么?
Arrays.copyof是用於數組進行復制時常使用的方法,本身在Arrays類里面,而之所以能這么使用而不用創建對象在於該方法本身由static修飾,被static修飾的方法可以在該類創建對象前載入jvm
2、方法解析
下圖包含了copyof眾多的重載方法

以最典型的Arrays.copyOf(srcArray, length);為例進行分析
其實質是調用了System.arraycopy方法

public static long[] copyOf(long[] original, int newLength) {
       long[] copy = new long[newLength];
       System.arraycopy(original, 0, copy, 0,
                        Math.min(original.length, newLength));
       return copy;
   }

由此可以看到實現有三布:
1、先產生一個新的數組
2、調用arraycopy方法
3、返回產生的新數組
3、思考
當我們將原來的數組進行擴容的時候,調用該方法產生了一個新的數組,而將擴容后的數組賦值給原來的數組的時候,原數組指向新產生的數組,但其原數組的內容依然在內存中,等待jvm回收,在這段時間中其實是造成了內存的浪費
所以使用該方法盡管簡便,實際上有一定的不足。
4、System.arraycopy的實現

   private static void arraycopy(long[] original, int i, long[] copy,int j, int min) {
        for (; i< min; i++) {
            if (i<original.length) {
                copy[j++] = original[i];
            }else {
                copy[j++]=0;
            }
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM