arrays.copyof() 和 system.arraycopy()的区别和联系

Arrays.copyOf()System.arraycopy()的区别和联系

1、System.arraycopy

方法作用:将源数组的一段 复制到 目标数组中的某个地方

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

参数说明:

src : 源数组

srcPos:从原数组中的哪个索引开始

dest:目标数组

destPos:放在目标数组中的哪个索引开始

length :长度

  1. 这个方法是System 下, 被 native 关键字修饰的方法,所以该方法是由别的语言写的
  2. 如果length 超过了原数组或者目标数组的起始索引都会报错
  3. 该方法必须有原数组和目标数组
  4. 元数组和目标数组可以是相同的,实现对自身数组的操作(ArrayListaddremove方法)
// 模拟arrayList的add方法
// 删除索引为4,值为5的元素,就要将要删除元素之后第一个到最后一个所有元素向前移动一位

int[] array = {1, 2, 3, 4, 5, 6, 7, 0, 0, 0};
System.out.println("原来的Array:" + Arrays.toString(array));

// 
System.arraycopy(array, 4+1, array, 4, 7-(4+1));
System.out.println("拷贝后的Array:" + Arrays.toString(array));

// 原来的Array:[1, 2, 3, 4, 5, 6, 7, 0, 0, 0]
// 拷贝的Array:[1, 2, 3, 4, 6, 7, 0, 0, 0, 0]

2、Arrays.copyOf()

方法作用:生成一个源数组中的所有元素或者从开头的一段元素 复制到新数组中的最前面

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

参数说明

original:源数组

newLength:新生成的数组长度

返回值:T:生成新的数组

  1. 该方法内部调用了System.arraycopy方法,所有消耗较大
  2. 该方法可以生成一个复制数组,该数组可以是源数组从开头的一部分,也可以是源数组,也可以多于原数组,取决于自己给的长度
  3. 不能复制原数组中的不从开头开始的一段,也不能指定复制到新数组中的某个位置
int[] array = {1, 2, 3, 4, 5};
int[] array2;

array2 = Arrays.copyOf(array, array.length - 2);
System.out.println(Arrays.toString(array2));
// [1, 2, 3]


array2 = Arrays.copyOf(array, array.length);
System.out.println(Arrays.toString(array2));
// [1, 2, 3, 4, 5]

array2 = Arrays.copyOf(array, array.length + 2);
Sys1tem.out.println(Arrays.toString(array2));
// [1, 2, 3, 4, 5, 0, 0]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值