System.arraycopy
Posted 请叫我大表哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.arraycopy相关的知识,希望对你有一定的参考价值。
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
参数说明:
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度
原理:
实现过程是这样的,先生成一个长度为length的临时数组,将src数组中srcPos 到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时组,srcPos,dest,destPos,length).
注意:
1、src 和 dest都必须是同类型或者可以进行转换类型的数组.
2、srcPos、srcPos+length-1都必须小于src的size,destPos、destPos+length-1也必须小于dest的size。
3、临时数组必须能一一对应到dest数组中。
例:
int[] fun ={0,1,2,3,4,5,6}; int[] fun1 = {7,8,9,10}; /** * 两个不同数组间的拷贝 * 1、拷贝fun中索引3到5(3+3-1)数据到临时数组中,生成临时数组int[] tmp = {3,4,5}。 * 2、替换fun1中索引从1到3(1+3-1)的元素。 */ System.arraycopy(fun, 3, fun1, 1, 3);//结果为fun不变,fun1变为{7,3,4,5} /** * 同一个数组自己到自己的拷贝 * 1、拷贝fun中索引3到6(3+4-1)数据到临时数组中,生成临时数组int[] tmp = {3,4,5,6} * 2、替换fun中索引2到5(2+4-1)的元素。 */ System.arraycopy(fun, 3, fun, 2, 4);//结果fun为{0,1,3,4,5,6,6}
以上是关于System.arraycopy的主要内容,如果未能解决你的问题,请参考以下文章
System.arraycopy 不抛出 ArrayIndexOutOfBoundsException
System.arraycopy 和Arrays.copyOf
Java 学习笔记 System.arraycopy 复制数组