1. 程式人生 > >System.arraycopy和arrays.copyOf

System.arraycopy和arrays.copyOf

代碼 類型 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