System.arraycopy和arrays.copyOf
阿新 • • 發佈:2018-05-07
代碼 類型 obj stp component 個數 底層 div color
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
這個是system.arraycopy()
src-原數組
srcPos - 源數組中的起始位置。
dest - 目標數組。
destPos - 目標數據中的起始位置。
length - 要復制的數組元素的數量。
該方法是用了native關鍵字,調用的為C++編寫的底層函數,可見其為JDK中的底層函數。
下面是Arrays.copyOf
//復雜類型
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original,0, copy, 0, Math.min(original.length, newLength)); return copy; } public static <T> T[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); }
original - 要復制的數組
newLength - 要返回的副本的長度
newType - 要返回的副本的類型
//基本數據類型(其他類似byte,short···) 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; }
觀察其源代碼發現copyOf(),在其內部創建了一個新的數組,然後調用arrayCopy()向其復制內容,返回出去。
總結:
1.copyOf()的實現是用的是arrayCopy();
2.arrayCopy()需要目標數組,對兩個數組的內容進行可能不完全的合並操作。
3.copyOf()在內部新建一個數組,調用arrayCopy()將original內容復制到copy中去,並且長度為newLength。返回copy;
轉自:https://blog.csdn.net/shijinupc/article/details/7827507
System.arraycopy和arrays.copyOf