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]