Java中Arrays类的常用API(比较器,sort,二分搜索)

liandaozhanshi / 2023-06-13 / 原文

 代码实现:

package com.itheima.d7_arrays;

import java.util.Arrays;

/**
 * 目标:学会使用arrays类的常用api,并理解其原理
 */
public class ArraysDemo1 {
    public static void main(String[] args) {
        int[] arr = {10, 2 , 55 , 23 , 24 ,100};
        System.out.println(arr);
        //1、返回数组内容 toString(数组);
//        String rs = Arrays.toString(arr);
//        System.out.println(rs);

        System.out.println(Arrays.toString(arr));

        //2、排序的API(默认自动对数组元素进行升序排序)
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr)); //API调用工程师

        //3、二分搜索技术(前提:数组必须排好序才支持,否则出bug)
        int index = Arrays.binarySearch(arr,55);
        System.out.println(index);

        //返回不存在元素的规律:   - (应该插入的位置 + 1)
        int index1 = Arrays.binarySearch(arr,555);
        System.out.println(index1);


        //注意:数组如果没有排好序,可能会找不到存在的元素,从而出现bug!!
        int[] arr1 = {12 , 36 ,29 ,98 , 54 , 79 ,62};
        System.out.println(Arrays.binarySearch(arr1,29));


    }
}

 

 

1、Arrays的sort方法对于有值特性的数组是默认升序的。
2、需求:降序排序!(自定义比较器对象,只能支持引用类型的排序!!)。
package com.itheima.d7_arrays;

import java.util.Arrays;
import java.util.Comparator;

public class ArrayDemo2 {
    public static void main(String[] args) {
        //目标:自定义数组的排序规则:Comparator比较器对象
        //1、Arrays的sort方法对于有值特性的数组是默认升序的
        int[] ages = {16 , 32 , 11 , 6 , 98};
        Arrays.sort(ages);
        System.out.println(Arrays.toString(ages));

        //2、需求:降序排序!(自定义比较器对象,只能支持引用类型的排序!!)
        Integer[] ages1 = {16 , 32 , 11 , 6 , 98};
        /**
         * 参数一:被排序的数组,必须是引用类型的元素
         * 参数二:匿名内部类对象,代表了一个比较器对象
         */
        Arrays.sort(ages1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
//                //制定比较规则
//                if( o1 > o2){
//                    return 1;
//                }else if( o1 < o2){
//                    return -1;
//                }
//                return 0;
//                return o1 - o2; //默认升序
                return o2 - o1;
            }
        });
        System.out.println(Arrays.toString(ages1));

        System.out.println("------------------------------");
        Student[] students = new Student[3];
        students[0] = new Student("王文军",18,185.3);
        students[1] = new Student("王文",14,195.2);
        students[2] = new Student("王军",22,165.7);
        System.out.println(Arrays.toString(students));

//        Arrays.sort(students); // 直接运行崩溃
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //自己制定比较规则
//                return o1.getAge() - o2.getAge();
//                return Double.compare(o1.getHeight(), o2.getHeight()); //比较浮点型可以这样写 升序
                return Double.compare(o2.getHeight(), o1.getHeight());//比较浮点型可以这样写,降序
            }
        });
        System.out.println(Arrays.toString(students));

    }
}