陣列拷貝的五種方法
阿新 • • 發佈:2019-02-18
對一維陣列而言,僅不開闢空間的直接賦值為淺拷貝(brr=arr)
陣列拷貝有5種方法
1.for
2.System.arraycopy(src,srcpos,dest,destpos,length)
3.Arrays.copyof( original, newlength)
4.clone()
5.Arrays.copyOfRange(original,from,to)
1.for迴圈遍歷陣列對元素一一進行賦值操作(對於多維陣列來說是淺拷貝)
2.呼叫 System.arraycopy(src,srcpos,dest,destpos,length)//必須保證dest有足夠容量;
int[] arr = {1,2,3,4,5,6}; int[] brr = new int[arr.length]; System.arraycopy(arr,1,brr,0,5); System.out.println(Arrays.toString(brr)); //[2, 3, 4, 5, 6, 0]
3.呼叫Arrays.copyof( original, newlength);//original:原陣列,newlength:開闢大小為新陣列長度的空間
該函式呼叫Systrm.arrayscopy()
int[] arr = {1,2,3,4,5,6}; int[] brr = {1}; brr =Arrays.copyOf(arr,3); System.out.println(Arrays.toString(brr)); //[1, 2, 3] brr =Arrays.copyOf(arr,6); System.out.println(Arrays.toString(brr)); //[1, 2, 3, 4, 5, 6]
由示例可以看到拷貝與dest的初始大小無關所以用該方法可以於給陣列進行擴容 arr = Arrays.copyOf(arr,arr.length+3);
同樣該方法也可以對陣列進行縮容(如果刪除元素沒有縮容會打印出無效值)
arr = Arrays.copyOf(arr,arr.length-1);
但是該方法是在堆中重新開闢空間,所以必定會改變陣列的首地址,所以在方法中對陣列進行該操作主函式內不可以呼叫。
public static void main(String[] args) { int[] arr = new int[]{1}; change(arr); System.out.println(arr[0]); //輸出1 } public static void change(int[] arr){ arr = Arrays.copyOf(arr,arr.length+1); arr[0] = 99999; }
4.呼叫object.clone()//對於自己建立的類必須通過介面實現
int[] arr = {1,2,3,4,5,6};
int[] brr = arr.clone();
System.out.println(Arrays.toString(brr)); //[1,2, 3, 4, 5, 6, 0]
5.呼叫Arrays.copyOfRange(original,from,to)
int[] arr = {1,2,3,4,5,6};
int[] brr = Arrays.copyOfRange(arr,1,4);
System.out.println(Arrays.toString(brr));