數組複製的效率問題

原文鏈接:https://www.cnblogs.com/jay8576/p/9649591.html

1、for循環,手動複製
2、System.arraycopy()方法
3、Arrays.copyOf()方法
4、clone()方法
結論:
由於System.arraycopy()是最貼近底層的,其使用的是內存複製,省去了大量的數組尋址訪問等時間,故效率最高。
對於Arrays.copyOf()方法查看源碼可以看到:
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;
}
它是藉助System.arraycopy()方法實現的,故效率次於System.arraycopy()
clone()方法效率是最低的,一般需要重寫,clone的方法Object執行特定的克隆操作。 首先,如果此對象的類不實現接口Cloneable ,則拋出CloneNotSupportedException 。 請注意,所有數組都被認爲是實現接口Cloneable ,並且數組類型T[]的clone方法的返回類型是T[] ,其中T是任何引用或原始類型。 否則,該方法將創建該對象的類的新實例,並將其所有字段初始化爲完全符合該對象的相應字段的內容,就像通過賦值一樣。 這些字段的內容本身不被克隆。 因此,該方法執行該對象的“淺拷貝”,而不是“深度拷貝”操作。如果需要“深度拷貝”操作,則需要遞歸clone()
對於數組空間小的情況下,前三種差別不大,對於比較大的數組,便可以明顯看出差別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章