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 要復制的數組元素的數量
-
注意:
- 如果
src
和dest
參數引用相同的數組對象,則執行復制,就好像位置srcPos
到srcPos+length-1
的組件首次復制到具有length
組件的臨時數組,然后臨時數組的內容被復制到位置destPos
通過目標數組的destPos+length-1
。 - 如果
dest
是null
,則拋出NullPointerException
。 - 如果
src
是null
,則拋出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()
-
思路:
- 首先獲得
a
數組的類對象 - 確認它是一個數組
- 使用
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]