Arrays工具类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]