1、Arrays是啥?
数组操作工具类,专门用于操作数组元素的。
2.Arrays类的常用API
方法 | 说明 |
public static String toString(类型[] a) | 对数组进行排序 |
public static void sort(类型[] a) | 对数组进行默认升序排序 |
public static <T> void sort(类型[] a,Comparator<? super T> c) | 使用比较器对象自定义排序 |
public static int binarySearch(int[] a,int key) | 二分搜索数组中的数据,存在返回索引,不存在返回索引,不存在返回-1 |
public static void main(String[] args) {
// 建一个数组
int[]arr = {1,8,3,9,5,15,7};
// 输出的是数组对象的内存地址
System.out.println(arr);
// 输出数组
System.out.println(Arrays.toString(arr));
// 排序的api
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 二分搜索:binarySearch(数组,要找的元素值),需要先排好序
int index = Arrays.binarySearch(arr,15);
// 返回这个元素的位置索引
System.out.println(index);
// 返回不存在的元素的规律;-
int index1 = Arrays.binarySearch(arr,16);
System.out.println(index1);
// 示例:如果没排好序进行二分搜索可能会找不到存在的元素,出现bug
int[]arr02 = {11,22,33,66,55,44};
System.out.println(Arrays.binarySearch(arr02,44));
}
控制台输出结果:
3.Arrays类对于Comparator比较器的支持
1.Arrays类的排序方法
方法 | 说明 |
public sataic void(类型[] a) | 对数组进行默认升序排序 |
public static <T> void sort(类型[] a, Compartor<?super T>c) | 使用比较器对象自定义排序 |
2.自定义排序规则
设置Comparator接口对应的比较器对象,来定制比较规则。
如果认为左边数据 大于 右边数据,则返回正整数。
如果认为左边数据 小于 右边数据,则返回负整数。
如果认为左边数据 等于 右边数据,则返回0。
public static void main(String[] args) {
// Arrays的sort方法对于有值特性的数组是默认升序排序的
int [] arr = {36,99,72,6,44};
// 未排序
System.out.println(Arrays.toString(arr));
// 默认升序排序
Arrays.sort(arr);
// 输出升序排序结果
System.out.println(Arrays.toString(arr));
// 新建一个数组实现需求:降序排序 自定义比较器对象,只能支持引用类型的排序
Integer[]arr2 = {23,55,46,78,3};
// 参数1:被排序的数组,必须是引用类型的元素
// 参数2:匿名内部类对象,代表一个比较器对象
Arrays.sort(arr2, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 -o1;
}
});
System.out.println(Arrays.toString(arr2));
}
控制台输出结果:
例子:自定义数组的排序:
定义学生类:
public class Student {
private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{"+"学号:"+id+"姓名:"+name+'\''+"年龄"+age+'}'+"\n";
}
public static void main(String[] args) {
// 自定义一个数组
Student[] students = new Student[3];
students[0] = new Student(10001,"双面龟",34);
students[1] = new Student(10002,"小美美",33);
students[2] = new Student(10003,"阿酷",32);
// Arrays的sort方法自定义排序规则
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 根据学号进行升序排序
return o1. getId() - o2.getId();
// 学号降序,其他同理
// return o2.getId() -o2.getId();
}
});
System.out.println(Arrays.toString(students));
}
控制台输出结果: