【Java】Arrays.copyOf & System.arraycopy

TypantK發表於2019-03-19

public static <T> T[] copyOf(T[] original, int newLength) 



    @SuppressWarnings("unchecked")
    public static <T> T[] copyOf(T[] original, int newLength) {
        return (T[]) copyOf(original, newLength, original.getClass());
    

    
    public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
        @SuppressWarnings("unchecked")
        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;
    }

底層還是呼叫System.arraycopy,除此之外,多了一步建立物件(新集合)的過程

 

public static native void arraycopy

           (Object src,  int  srcPos, Object dest, int destPos, int length);


    public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

*用於將舊陣列的資料複製到新陣列

src:原陣列(注意這裡是將陣列當成Object物件)

srcPos:原陣列的起始位置

dest:目標陣列

destPos:目標陣列的起始位置

length:要複製的元素個數

相關文章