集合源碼基礎之數組擴容技術

集合源碼基礎之數組擴容技術

數組複製1:Arrays.copyOf(Object[] objects, int length)

Arrays.copyOf(Object[] objects, int length)功能是實現數組的複製,返回複製後的數組。參數爲被複制的數組和複製的長度(複製以後不足的按照null填充)。java

package top.flygrk.ishare.list.test;

import java.util.Arrays;

/**
 * @Author: flygrk
 * @Version: 1.0
 * @Description: 數組擴容技術
 */
public class ArrayCopy {

    public static void main(String[] args) {
        Object[] objects = {1, 2};
        System.out.println("當前數組長度: " + objects.length);

        //返回新的數組,將原來的長度爲2的數組,如今擴容到10, 原來自己的數據不變
        Object[] copyNewObjects = Arrays.copyOf(objects, 10);
        System.out.println("copyNewObjects: " + copyNewObjects.length);

    }

}

數組複製2:System.arraycopy(Object src, int srcPos,Object dest, int destPos,int length);

System.arraycopy()方法若是是數組比較大,那麼使用System.arraycopy()會比較有優點,由於其使用的是內存複製,省去了大量的數組尋址訪問等時間。複製指定源數組src到目標數組dist。複製從源數組src的srcPos索引開始,複製長度爲length,複製到dest數組的開始索引爲destPos。數組

package top.flygrk.ishare.list.test;

import java.util.Arrays;

/**
 * @Author: flygrk
 * @Version: 1.0
 * @Description: 數組擴容技術
 */
public class ArrayCopy {

    public static void main(String[] args) {

        int[] fun = {0, 1, 2, 3, 4, 5, 6};


        System.arraycopy(fun, 0, fun, 3, 3);

        for (int i: fun) {
            System.out.print(i + " ");
        }

    }

}

//運行結果: 0 1 2 0 1 2 6
  • System.arraycopy() 源碼:
/**
 * @Description: 數組複製
 * @Param src: 源數組
 * @Param srcPos: 源數組複製開始的下標
 * @Param dest: 目標數組
 * @Param destPos: 目標數組存放的開始下標
 * @Param length: 複製長度
 */
public static native void arraycopy(
    Object src, int srcPos, Object dest,
    int destPos, int length
);

注意: 上述代碼,若是複製的length超越了(數組的長度-起始位置的長度),那麼就會提示數組下標越界異常。微信

感謝您的觀看,若有寶貴意見,煩請及時提出,謝謝。歡迎關注微信公衆號:源碼灣~

相關文章
相關標籤/搜索