Java:Arrays类
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));
// 排序的apiArrays.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);
// 示例:如果没排好序进行二分搜索可能会找不到存在的元素,出现bugint[]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>() {@Overridepublic 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;}@Overridepublic 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>() {@Overridepublic int compare(Student o1, Student o2) {
// 根据学号进行升序排序return o1. getId() - o2.getId();
// 学号降序,其他同理
// return o2.getId() -o2.getId();}});System.out.println(Arrays.toString(students));}
控制台输出结果: