全量拷贝和范围拷贝: 全量拷贝主要调用的是一个Arrays.copyof(int1,int1.length * 2 ),这个方法完成全量拷贝,其次Arrays.copyof()方法主要调用的是这个方法: System.arraycopy(ints,0,intsdest,0,ints.lenngth)。从而实现数组的全量拷贝的过程

范围拷贝:主要是使用Array.copyofRange(int1,from: ,to: ),这个函数实现范围的拷贝。

package com.ydlclass;

import java.util.Arrays;
import java.util.Random;

public class ArraysTest {
    public static void main(String[] args) {
        //Arrays//这类的Arrays是一些工具类,这类的工具类的方法的性能相比叫我们的方法要快的多
        int[] ints = new int[10000000];
        Random random = new Random();
        for (int i = 0; i < 10000000; i++) {
            ints[i] = random.nextInt(100000);
        }
        long start = System.currentTimeMillis();
        Arrays.sort(ints);
        long end = System.currentTimeMillis();
        System.out.println(end - start);

        long start2 = System.currentTimeMillis();
        int i = Arrays.binarySearch(ints, 234);//返回的是一个想要查找的数字在这个数组中的下标的位置。正数表示找到了,负数则表示没找到

        System.out.println(i);

        long end2 = System.currentTimeMillis();
        System.out.println(end2 - start2);

        System.out.println("数组的比较");//可以直接查看这个源码,别人写的比较算法的精髓,关注于细节的实现,所以代码的效率很高

        int[] ints1 = {1,2,3,6,1,2,12};
        int[] ints2 = {1,2,3,6,1,2,12};
        int compare = Arrays.compare(ints1, ints2);
        System.out.println(compare);//返回为0,则表示相同


        int[] ints3 = Arrays.copyOf(ints1, ints1.length * 2);//数组的拷贝,这个函数的返回结果是一个新的数组,

        //这个方法可以很好的帮助我们实现数组的扩容
        System.out.println(Arrays.toString(ints3));//前面会直接复制,其余的长度填充为0
        //源码中其实是使用了本地方法,这个方法的实现主要是依赖于本地方法

        int[] int4 = new int[ints1.length * 2];
        System.arraycopy(ints1,0,int4,0,ints1.length);//这个方法其实就是之前的copyof()方法中所使用的方法
        System.out.println(Arrays.toString(int4));//方法的使用其实和前面的本质是相同的
        //这种的方法可以更加的灵活
        //第一个是一个原数组,第二个参数是从原数组的第几个位置开始拷贝,第三个是从目的数组,第四个是从目的数组的第几个位置开始拷贝,第五个参数是拷贝的长度是多少?



        int[] ints4 = Arrays.copyOfRange(ints1, 2, 4);//范围内的拷贝
        System.out.println(Arrays.toString(ints4));


    }
}