1. 程式人生 > 其它 >Arrays工具類copyof

Arrays工具類copyof

copyOf

它是Arrays工具類的方法。使用:Arrays.copyof(原陣列,長度);

基本使用

將舊陣列中的元素按照指定位置拷貝到新陣列中。

package com.powernode.arrays;

import java.util.Arrays;

public class Demo6 {
public static void main(String[] args) {
int[] arr = {5, 12, 18, 28, 45, 59, 72, 76, 77, 90};
int[] newArr = Arrays.copyOf(arr, 5);
System.out.println("原陣列:" + Arrays.toString(arr));
System.out.println("新陣列:" + Arrays.toString(newArr));
System.out.println(arr == newArr);
}
}

點選進入copyof它的底層是一個這個方法:

 public static int[] copyOf(int[] original, int newLength) {
int[] copy = new int[newLength];
System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));
return copy;
}

在點進arraycopy中,可以看到是如下:

public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);

src:原陣列

srcPos:從原陣列第幾個索引位置開始拷貝

dest:新陣列

destPost:從新陣列的第幾個索引開始賦值

length:從原陣列拷貝幾個元素

  int[] arr = {5, 12, 18, 28, 45, 59, 72, 76, 77, 90};
int[] newArr = new int[10];
//把arr陣列從下標為1的位置開始拷貝到newArr陣列的第0個下標開始,元素個數是arr的長度-1個,
System.arraycopy(arr,1,newArr,0,arr.length-1);
System.out.println(Arrays.toString(newArr));
結果為:[12, 18, 28, 45, 59, 72, 76, 77, 90, 0]

補充

此方法只有宣告,沒有實現。第一次看見方法使用關鍵字native修飾的,native修飾表示這個是一個本地方法。

java有個使用者和本地c程式碼進行互操作的API,稱為java本地介面

引出native是因為java是一個跨平臺的語言,所以它犧牲了一些對底層的控制,此時需要其他語言的幫助了比如:c、c++。java無法直接訪問到作業系統底層,所以使用native方法來幫助實現一些擴充套件功能。使用native修飾的方法不是用java語言寫的,是由c或c++編寫的。

可以使用System.arraycopy刪除一個元素
    //刪除元素下標為2的元素
int[] arr = {5, 12, 18, 28, 45, 59, 72, 76, 77, 90};
int index=2;
System.arraycopy(arr,index+1,arr,index,arr.length-index-1);
arr[arr.length-1]=0;//把最後一個元素置為0
System.out.println(Arrays.toString(arr));
結果:[5, 12, 28, 45, 59, 72, 76, 77, 90, 0]
使用system.arraycopy新增一個元素
//在陣列中插入一個元素,在下標為2的位置插入222
int[] arr = {5, 12, 18, 28, 45, 59, 72, 76, 77, 90};
int index=2;
int[] newArr=new int[arr.length+1];
//先把arr中的5,12拷貝到newArr中
System.arraycopy(arr,0,newArr,0,index);//[5, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0]
//在把arr中後面的元素拷貝到index+1的位置
System.arraycopy(arr,index,newArr,index+1,arr.length-index);//[5, 12, 0, 18, 28, 45, 59, 72, 76, 77, 90]
newArr[index]=222;
System.out.println(Arrays.toString(newArr));
結果為:[5, 12, 222, 18, 28, 45, 59, 72, 76, 77, 90]