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是一个双向链表结构,插入数据快,查找数据慢。

你可能感兴趣的:(java System.arrayCopy使用说明)