详解Java中的Arrays类的copyOf()方法

java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。

  • Arrays.copyOf(T[] original,int newLength ):拷贝数组,其内部调用了System.arrayCopy()方法,从下标0开始,如果超过原数组长度,会用null进行填充。
  • 如下图可见:源码分析,内部调用了System.arraycopy()方法
    详解Java中的Arrays类的copyOf()方法_第1张图片
  • Arrays.copyOf()使用样例:
 Integer[] arr={1,2,3,4,5,6};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        //拷贝数组arr1到长度为10的新数组中,
        // 如果新数组长度大于arr1的长度,超过的部分用null填充
        //如果新数组长度小于arr1的长度,只拷贝前几个数据
        Integer[] arr2 = Arrays.copyOf(arr, 3);//arr2是{1,2,3}
        Integer[] arr3 = Arrays.copyOf(arr, 10);//arr3是{1,2,3,4,5,6,null,null,null,null}
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }
         for (int i = 0; i < arr3.length; i++) {
            System.out.println(arr3[i]);
        }
  • 应用场景举例
    ArrayList底层代码的动态扩容实现
    详解Java中的Arrays类的copyOf()方法_第2张图片

System类中的arraycopy()方法

System.arraycopy使用的基本定义

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

  • src:源数组;

  • srcPos:源数组要复制的起始位置;

  • dest:目的数组;

  • destPos:目的数组放置的起始位置;

  • length:复制的长度

    在这里插入图片描述

   	    Integer[] arr={1,2,3,4,5,6};
        Integer[] arr2={5,6,7,8,9,10};
        System.arraycopy(arr,0,arr2,1,3);
        for (int i = 0; i <arr2.length; i++) {
            System.out.println(arr2[i]);//arr2为{5,1,2,3,9,10}
        }
  • 应用场景举例
    ArrayList源码中的remove()方法,实质上是对数组的拷贝
    详解Java中的Arrays类的copyOf()方法_第3张图片

你可能感兴趣的:(Java基础)