全量拷贝和范围拷贝: 全量拷贝主要调用的是一个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));
}
}