文章目录
Arrays类
1. 概述,常用功能演示
作用
数组操作工具类,专门用于操作数组元素
常用API
例子演示
public class ArraysDemo1 {
public static void main(String[] args) {
//学会使用Arrays常用API
//1.返回数组内容
int[] arr = new int[]{10, 2, 34, 5, 6, 11};
System.out.println(arr);//这样输出的是arr的引用地址
System.out.println(Arrays.toString(arr));//这样才是arr中的数据
//写代码时 可以将sout放到最后(小技巧),即:
//Arrays.toString(arr).sout 这样回车后是上面的结果
//2.排序(默认升序)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//3.二叉树搜索(已排序的数组!!!),找得到返回索引,找不到则返回对应方法计算出的值,是负数
//具体的返回值,如果原数组有序,
// 是这个不存在的数应该在的索引的相反数再减一,否则就是-1
System.out.println(Arrays.binarySearch(arr, 34));
//下面结果应该是-2,但如果arr没有排序,那么结果是-1
System.out.println(Arrays.binarySearch(arr, 3));
//由于是二叉寻找,数组必须从小到大排序,否则找不到!!!
int[] arr2 = new int[]{12, 36, 11, 3, 34, 56, 1};
System.out.println(Arrays.binarySearch(arr2, 36));//输出-6
}
}
Arrays的binarySearch方法的源码
2. Arrays类对于Comparator比较器的支持
默认的比较规则
只能支持 数组元素是引用类型的排序,
例如int型数组肯定是不行的,Integer数组则可以
实例
简单的例子
public class ArrayComparatorDemo {
public static void main(String[] args) {
//目标: 学会使用比较器,自定义数组的排序规则
Integer[] integers = new Integer[]{22, 12, 24, 7};
Arrays.sort(integers, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//按照默认的规则写代码,得到的是升序排序
if(o1>o2){
return 1;
}else if(o1<o2){
return -1;
}
return 0;
}
});
//或者可以简化为,用到了lambda简化语法
Arrays.sort(integers,(o1, o2) -> o1-o2);
//同理,我们只要将return的改成o2-o1即可实现降序排序
Arrays.sort(integers,(o1, o2) -> o2-o1);
}
}
Student类进阶例子
新点:Double.compare() API(可爱的Sun公司让我们都没有发挥的空间了呢)
public class ArraysComparatorStudentDemo {
public static void main(String[] args) {
//目标,用Arrays的比较器,
// 按照Student的年龄和身高自定义排序规则
Student[] students = new Student[3];
students[0] = new Student("张三",23,170.2);
students[1] = new Student("李四",18,170.6);
students[2] = new Student("王二",13,155);
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();//按年龄升序排序
//return o2.getAge()-o1.getAge();//按年龄降序排序
//如果要以身高排序,不能直接相减,因为身高不是int,
// 也不能说强转成int,会有数据的丢失造成比较不准确
//return Double.compare(o1.getHeight(),o2.getHeight());//按身高升序排序
//return Double.compare(o2.getHeight(),o1.getHeight());//按身高降序排序
}
});
//因为在Student类中 重写了toString方法,
// 所以这样输出的并不是Student的引用地址,而是按我的toString方法的输出
System.out.println(Arrays.toString(students));
}
}
其中,Student类是标准的JavaBean框架创建的类,包括私有字段和对应的getter和setter方法,有参和全参构造方法,最后还重写了toString方法,均可用alt+insert+fn实现