JAVA不常用的方法——System.arraycopy()

System中有很多不常用的方法,基本上都是native修饰方法,虽然不常用,但是可以有助于我们理解JDK的源码。

比如:arraycopy()在ArrayList中就用到了。

先说明一下该方法作用是:从一个数组中选择一些元素赋值到另一个数组中。

arraycopy源码:

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

解释一下参数是什么意思:

Object src:原数组。
int  srcPos:从原数组的起始位置开始。
Object dest:目标数组。
int destPos:目标数组的开始位置。
int length:要复制原数组的长度。

示例:

 int[] src = new int[]{1, 2, 3, 4, 5};
 int[] dest = new int[5];

 System.arraycopy(src, 0, dest, 0, 5);

 for (int a : src) {
     System.out.print(a + " ");
 }
 System.out.println("");
 for (int a : dest) {
     System.out.print(a + " ");
 }
--输出结果:
-- 1 2 3 4 5 
-- 1 2 3 4 5 

注意下上面和下面两个例子的区别,dest数组在下面例子中有6个元素,都是9,复制之后dest的前5个元素变成了1 2 3 4 5 

        int[] src = new int[]{1, 2, 3, 4, 5};
        int[] dest = new int[]{9, 9, 9, 9, 9, 9};

        System.arraycopy(src, 0, dest, 0, 5);

        for (int a : src) {
            System.out.print(a + " ");
        }
        System.out.println("");
        for (int a : dest) {
            System.out.print(a + " ");
        }
-- 输出结果
-- 1 2 3 4 5
-- 1 2 3 4 5 9

如果dest长度是10,复制的元素只有5个,则其余自动补0,如下:

  int[] src = new int[]{1, 2, 3, 4, 5};
  int[] dest = new int[10];

  System.arraycopy(src, 0, dest, 3, 5);

  for (int a : src) {
      System.out.print(a + " ");
  }
  System.out.println("");
  for (int a : dest) {
      System.out.print(a + " ");
  }
-- 输出结果:
-- 1 2 3 4 5
-- 0 0 0 1 2 3 4 5 0 0

还有像是ArrayList源码中add(int index , E element)方法

    public void add(int index, E element) {
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  
        System.arraycopy(elementData, index, elementData, index + 1, size - index);
        elementData[index] = element;
        size++;
    }

我们都知道ArrayList的底层是使用数组存储元素的,所以这个意思就是在往List中通过从方法添加元素时,会先将数组中index后面的元素复制到index后面,也就是将index后面的元素都往后移一位,在将新元素element添加到index这个位置。

 

 

 

你可能感兴趣的:(JAVA中不常用的方法或者类)