System.arraycopy

WuRoc發表於2020-06-26
private void resize() {

        int[] arrayNew = new int[array.length*2]
                //把以前的陣列複製到新的陣列
                System.arraycopy(array,0,arrayNew,0,array.length);
        array = arrayNew;
    }
    轉載: https://www.cnblogs.com/WLCYSYS/p/13194286.html

 

從指定的源陣列(從指定位置開始)複製陣列到目標陣列的指定位置。陣列元件的子序列從引用的源陣列複製到引用src的目標陣列dest複製的元件數等於length引數。源陣列中位置srcPos到 的元件srcPos+length-1分別複製到目標陣列中的位置destPos到 destPos+length-1

如果srcdest引數是指相同的陣列物件,則複製是因為如果組分在位置執行srcPos通過 srcPos+length-1首先被複制到一個臨時陣列length元件,然後將臨時陣列的內容被複制到的位置 destPos通過destPos+length-1目標陣列的。

如果destnull,則 NullPointerException丟擲。

如果srcnull,則NullPointerException丟擲 ,並且不修改目標陣列。

否則,如果滿足以下任一條件,則將ArrayStoreException引發an 並且不會修改目標:

  • src引數引用的不是陣列物件。
  • dest引數引用的不是陣列物件。
  • src引數和dest引數指陣列,其部件型別是不同的原始型別。
  • src變數引用具有原始元件型別的陣列,而自dest變數引用具有參考元件型別的陣列。
  • src變數引用具有引用元件型別的陣列,而自dest變數引用具有原始元件型別的陣列。

否則,如果滿足以下任一條件,則將IndexOutOfBoundsException引發an 並且不會修改目標:

  • srcPos引數為負值。
  • destPos引數為負值。
  • length引數為負值。
  • srcPos+length大於 src.length,源陣列的長度。
  • destPos+length大於 dest.length,目標陣列的長度。

否則,如果源陣列中從位置srcPos到 位置的任何實際元件srcPos+length-1都無法通過賦值轉換轉換為目標陣列的元件型別,ArrayStoreException則會引發an 在這種情況下,令 k為小於長度的最小非負整數,以使src[srcPos+k]無法轉換為目標陣列的元件型別。當丟擲異常,從位置源陣列元件srcPos通過 srcPos+ķ-1將已經被複制到目標陣列位置 destPos通過 destPos+ķ-1並且不會修改目標陣列的其他位置。(由於已經逐項列出了限制,因此本段僅適用於兩個陣列都具有引用型別的元件型別的情況。)

引數:
src 源陣列。
srcPos 在源陣列中的起始位置。
dest 目標陣列。
目標資料中的destPos起始位置。
length 要複製的陣列元素的數量。
丟擲:
IndexOutOfBoundsException-如果複製將導致超出陣列範圍的資料訪問。
ArrayStoreException-如果由於型別不匹配src 而無法將陣列中的元素儲存到dest陣列中。
NullPointerException異常 -如果任一src或者 destnull