System.arraycopy使用详解

System.arraycopy作用

在阅读CopyOnWriteArrayList源码时, add(int index, E element)方法中看到将元素添加到指定位置时使用了 System.arraycopy(elements, 0, newElements, 0, index) 这个方法,对此方法甚是陌生,特意查询文旦了解这个方法.

在这里插入图片描述

System.arraycopy就是把一个数组中某一段字节数据放到另一个数组中。至于从第一个数组中取出几个数据,放到第二个数组中的什么位置都是可以通知这个方法的参数控制的。

System.arraycopy使用的基本定义

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

  • src:源数组;

  • srcPos:源数组要复制的起始位置;

  • dest:目的数组;

  • destPos:目的数组放置的起始位置;

  • length:复制的长度.

注意:src 和 dest都必须是同类型或者可以进行转换类型的数组

Sample usages:

System.arraycopy(int[] arr, int star,int[] arr2, int start2, length);

5个参数,

  • 第一个参数是要被复制的数组
  • 第二个参数是被复制的数字开始复制的下标
  • 第三个参数是目标数组,也就是要把数据放进来的数组
  • 第四个参数是从目标数据第几个下标开始放入数据
  • 第五个参数表示从被复制的数组中拿几个数值放到目标数组中
eg:
public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };

        int[] arr2 = { 5, 6,7, 8, 9 };

        System.arraycopy(arr, 1, arr2, 0, 3);

        System.out.println(JSON.toJSON(arr2));
    }

int[] arr2 = { 2, 3, 4, 8, 9 };

过程分析

先看第System.arraycopy中1、2、5个参数,得出要从arr中从下标为1的数组中拿出三个数值:2,3,4
然后看第3、4个参数,知道要在arr2中从下标为0开始放入数据,放入的个数也是第五个参加决定的这里是3个
所有最后的结果就是:2,3,4(加入的) + 8,9(原来的)

比如:System.arraycopy(arr , 1 , arr2 , 2 , 3);
表示的是从数组arr中下标为1的位置取出3个数据,放到数组arr2中从下标为2的位置,放入3个数据。

notice:
这里要数组放入的数据的个数是不能超过它本身的长度的,否则会报数组异常错误。
// 此功能要求
// 源的起始位置+长度不能超过末尾
// 目标起始位置+长度不能超过末尾
// 且所有的参数不能为负数

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值