Java 實現數組擴容


1.手動實現單一類型數組擴容

int[] a= {1,2,3,4,5};
int[] newArray = new int[10];
for(int i = 0; i < a.length; i++){
	newArray[i] = a[i];
}
System.out.println(Arrays.toString(newArray));
//輸出結果為[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

2.System.arraycopy() 方法實現數組擴容

  • 實例:
int[] a= {1,2,3,4,5};
int[] newArray = new int[10];
System.arraycopy(a,0,newArray,0,a.length);
System.out.println(Arrays.toString(newArray));
//輸出結果為[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
  • 函數 public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    將指定源數組中的數組從指定位置開始復制到目標數組的指定位置。 陣列組件的一個子序列被從通過引用的源陣列復制src被引用的目標陣列dest 。 復制的組件數等於length參數。 在位置的部件srcPos通過srcPos+length-1源陣列中的被復制到的位置destPos通過destPos+length-1分別,目的地陣列。

  • 參數解釋:

    • src 源數組
    • srcPos 源數組中的起始位置
    • dest 目標數組
    • destPos 目標數組中的起始位置
    • length 要復制的數組元素的數量
  • 注意:

    • 如果srcdest參數引用相同的數組對象,則執行復制,就好像位置srcPossrcPos+length-1的組件首次復制到具有length組件的臨時數組,然后臨時數組的內容被復制到位置destPos通過目標數組的destPos+length-1
    • 如果destnull ,則拋出NullPointerException
    • 如果srcnull ,則拋出NullPointerException並且不修改目標陣列。

3.擴展已經填滿的數組方法 Arrays.copyOf()

int[] a = {1,2,3,4,5};
a = Arrays.copyOf(a, 2 * a.length);
System.out.println(Arrays.toString(a));
//輸出結果為 [1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

4.利用反射實現方法 Arrays.copyOf()

  • 思路:

    1. 首先獲得 a 數組的類對象
    2. 確認它是一個數組
    3. 使用 Class類(只能定義表示數組的類對象)的 getComponentType 方法確定數組對應的類型。
  • 實現代碼:

    /**
     * 此方法通過分配相同類型的新數組並復制所有元素來增大數組。
     * @param a 一個成長的數組。這可以是對象數組或基本類型數組
     * @param newLength 新數組的長度
     * @return 包含a的所有元素的較大數組。
     */
    public static Object goodCopyOf(Object a,int newLength){
        Class cl = a.getClass();
        if(!cl.isArray()) return null;
        //返回表示數組的組件類型的類 。 如果此類不表示數組類,則此方法返回null。
        Class componentType = cl.getComponentType();
        int length = Array.getLength(a);
        //是 Array類中的靜態方法 newInstance,它能夠構造新數組。在調用它時必須提供兩個參數,一個是數組的元素類型,一個是數組的長度。
        Object newArray = Array.newInstance(componentType,newLength);
        System.arraycopy(a,0,newArray,0,Math.min(length,newLength));
        return newArray;
    }
    

5.newInstance 方法解析

public static Object newInstance(類<?> componentType, int length) throws NegativeArraySizeException

創建具有指定組件類型和長度的新數組。 調用此方法等效於創建數組,如下所示:

int[] x = {length};
Array.newInstance(componentType, x);

實例:

int[] a= {1,2,3,4,5};
int[] newArray = (int[]) Array.newInstance(a.getClass().getComponentType(),10);
System.out.println(Arrays.toString(newArray));
//輸出結果為[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM