Arrays类的使用

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实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值