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));
}
过程分析
先看第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:
这里要数组放入的数据的个数是不能超过它本身的长度的,否则会报数组异常错误。
// 此功能要求
// 源的起始位置+长度不能超过末尾
// 目标起始位置+长度不能超过末尾
// 且所有的参数不能为负数