操作数组的工具类:
import java.util.Arrays;
public class MyArraysDemo1 {
public static void main(String[] args) {
//toString将数组变成字符串
int[] arr={1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.toString(arr));
//二分查找查找元素
//binarySearch:1.二分查找的前提是数组中元素必须有序,数组中元素必须是升序的。
//2.如果要查找的元素存在,则返回真实的索引,若是不存在,则返回-的插入点-1;
System.out.println(Arrays.binarySearch(arr,10));
System.out.println(Arrays.binarySearch(arr,2));
//copyOf:拷贝数组
int[] newArr1=Arrays.copyOf(arr,20);
System.out.println(Arrays.toString(newArr1));
//拷贝数组copyOfRange
//包头不包尾,包左不包右;
int[] newArr2=Arrays.copyOfRange(arr,0,9);
System.out.println(Arrays.toString(newArr2));
//fill:填充数组
Arrays.fill(arr,100);
System.out.println(Arrays.toString(arr));
//sort排序:默认情况下,给基本数据类型进行升序排列
int[] arr2={10,2,3,5,6,1,7,8,4,9};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
/*[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9
1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
*/
}
}
import java.util.Arrays;
import java.util.Comparator;
public class MyArraysDemo2 {
public static void main(String[] args) {
Integer[] arr={2,3,1,5,6,7,8,4,9};
//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则;
//但是这个实现类,我只要使用一次,所以没必要单独写一个类,直接采取匿名内部类的方式就可以了。
//底层原理:
//利用插入排序和二分查找的方式进行排序;
//默认把0索引的数据当作是有序的序列;1索引到最后是无序的序列;
//遍历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素;
/*
把A元素往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点;
拿着A元素,跟插入点的元素进行比较,比较的规则就是Compare方法的方法体;
如果方法的返回值是负数,拿着A继续跟前面的数据进行比较;
如果方法的返回值是正数,拿着A继续跟后面的数据进行比较;
如果方法的返回值是0,也拿着A跟后面的数据进行比较;
直到能确定A的最终位置为止;
*/
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println("-------------");
System.out.println("o1:"+01);
System.out.println("o2:"+o2);
return o1-o2;
}
});
System.out.println(Arrays.toString(arr));
//o1-o2是升序排列
//o2-o1是降序排列
}
}