arraycopy java_java System.arrayCopy使用说明

public static native void arraycopy(Object src, int srcPos,

Object dest, int destPos,

int length);

这是一个native方法最终交给jni层处理,用来拷贝数组

参数说明:

src 数据源数组,需要从哪个数组拷贝数据

srcPos 从src数据的那个位置开始拷贝

dest 目标数组,把src里面的数据拷贝到这里

destPos 开始填充数据的下标位置

length 从src数据中拷贝多少个数据

列子:

int[] original = {0,1,2,3,4,5,6,7,8,9};

int[] copy = {0,1,2,3,4,5,6,7,8,9,0,0};

System.arraycopy(original, 4, copy, 5, original.length-4);

copy[4] = 123;

for(int item:copy) {

System.out.print(item + ",");

}

将数组original数据的第4个位置开始拷贝,一共拷贝length-4个数组,依次从copy数组第五个开始存放。

输出:

0,1,2,3,123,4,5,6,7,8,9,0

这个就是ArrayList.add(index , E) 的实现原理:

public void add(int index, E element) {

rangeCheckForAdd(index);

ensureCapacityInternal(size + 1); // Increments modCount!!

System.arraycopy(elementData, index, elementData, index + 1,

size - index);

elementData[index] = element;

size++;

}

ArrayList在插入数据的时候先要进行扩容(如果有需要),然后拷贝数组,所以说ArrayList如果有频繁插入和删除的操作的话会非常消耗性能的,建议使用LinkedList。LinkedList是一个双向链表结构,插入数据快,查找数据慢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值