Java Arrays类、Comparable、Comparator

1. Arrays

用来操作数组的一个工具类

2. Arrays类提供的常用方法

|----------------------------------------------------------------------|----------------------------------------|
| Arrays类提供的常用方法名 | 说明 |
| public static String toString(类型[] arr) | 返回数组的内容 |
| public static int[] copyOfRange(类型[] arr, 起始索引, 结束索引) | 复制数组(指定范围) [起始索引,结束索引) |
| public static copyOf(类型[] arr, int newLength) | 复制数组( int newLength 数组的长度 多出来的会自动填默认值) |
| public static setAll(double[] array, IntToDouleFunction generator) | 把数组的原始数据改为新数据 |
| public static void sort(类型[] arr) | 对数组进行排序(默认是升序) |

java 复制代码
public static void main(String[] args) {
        //Arrays

        //public static String toString(类型[] arr)	 返回数组的内容
        int[] arr = {1,2,3,4,5,6,7,8,9};
        String s =  Arrays.toString(arr);
        System.out.println(s);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

        //public static int[] copyOfRange(类型[] arr, 起始索引, 结束索引)	复制数组(指定范围) 前闭后开[起始索引,结束索引)
        int[] arr2 = Arrays.copyOfRange(arr,0,4);
        System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4]

        //public static copyOf(类型[] arr, int newLength)复制数组 int newLength 新数组的长度 多出来的会自动填默认值 少的话只会复制长度的部分
        int[] arr3 = Arrays.copyOf(arr,10);
        System.out.println(Arrays.toString(arr3));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        int[] arr4 = Arrays.copyOf(arr,5);
        System.out.println(Arrays.toString(arr4));//[1, 2, 3, 4, 5]

        //public static setAll(double[] array, IntToDouleFunction generator)把数组的原始数据改为新数据
        double[] d = {99.3, 94.4, 93.5};
        Arrays.setAll(d, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) {
                return new BigDecimal(d[value] + "") .multiply(new BigDecimal("0.1")).doubleValue(); //将 d数组的每一项*0.1并返回 double容易失真,所以使用BigDecimal
            }
        });
        System.out.println(Arrays.toString(d));//[9.93, 9.44, 9.35]

        //public static void sort(类型[] arr)	对数组进行排序(默认是升序)
        Arrays.sort(d);
        System.out.println(Arrays.toString(d));//[9.35, 9.44, 9.93]
}

3. Comparable、Comparator

(1) 自定义类(如Student)时不能使用 public static void sort(类型[] arr) 方法进行排序(程序不知道要根据什么进行排序),会报错;有两种实现方法:Comparable接口或Comparator比较器

(2) Comparable:让该类对象实现Comparable(比较规则)接口,然后重写compareTo方法,自己制定比较规则

(3) 创建Comparator比较器接口的匿名内部类对象,自己制定比较规则;public static <T> void sort(t[] arr, Comparator<? super T> c) 对数组进行排序(支持自定义排序规则)

java 复制代码
public class Student implements Comparable<Student>{
    private String name;
    private int age;
    private double score;

    public Student() {
    }

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    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;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

//方式1. Comparable:让该类对象实现Comparable(比较规则)接口,然后重写compareTo方法,自己制定比较规则
    @Override
    public int compareTo(Student o) {
        //左边对象 大于 右边对象 返回正整数
        //左边对象 小于 右边对象 返回负整数
        //左边对象 等于 右边对象 返回0
        //如按照成绩排序 默认升序

        /*if (this.score > o.score) {
            return 1;
        }else if (this.score < o.score) {
            return -1;
        }else {
            return 0;
        }*/
        return Double.compare(this.getScore(), o.getScore());//升序

        //降序的话:
        //左边对象 大于 右边对象 返回负整数
        //左边对象 小于 右边对象 返回正整数
        //左边对象 等于 右边对象 返回0
       /* if (this.score > o.score) {
            return -1;
        }else if (this.score < o.score) {
            return 0;
        }else {
            return 0;
        }
        return Double.compare(o.getScore(), this.getScore());//降序
        */
    }
}


public static void main(String[] args) {
        Student[] students = new Student[4];
        students[0] = new Student("卡莎", 18, 100);
        students[1] = new Student("泰坦", 19, 98);
        students[2] = new Student("伊泽", 17, 99);
        students[3] = new Student("璐璐", 21, 15);

        // public static void sort(类型[] arr)	对数组进行排序(默认是升序)
        /*Arrays.sort(students);
        System.out.println(Arrays.toString(students));//报错*/

        //实现自定义类排序的两种方式:
        //1. Comparable:让该类对象实现Comparable(比较规则)接口,然后重写compareTo方法,自己制定比较规则
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));

        //2. 创建Comparator比较器接口的匿名内部类对象,自己制定比较规则;public static <T> void sort(t[] arr, Comparator<? super T> c) 对数组进行排序(支持自定义排序规则)
        //参数1:需要降序的数组
        //参数1:Comparator 比较器对象
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //降序的话:
                //左边对象 大于 右边对象 返回负整数
                //左边对象 小于 右边对象 返回正整数
                //左边对象 等于 右边对象 返回0
                /*if (o1.getScore() > o2.getScore()) {
                    return -1;
                }else if (o1.getScore() < o2.getScore()) {
                    return 0;
                }else {
                    return 0;
                }*/
                //return Double.compare(o1.getScore(), o2.getScore());//升序
                return Double.compare(o2.getScore(), o1.getScore());//降序
            }
        });
        System.out.println(Arrays.toString(students));

}
相关推荐
ThetaarSofVenice3 分钟前
【Spring框架 三】
java·后端·spring
Starshime16 分钟前
【Java】网络套接字
java·开发语言·网络
等什么君!17 分钟前
学习反射(反射的使用,反射的应用场景)
java·开发语言·学习
“抚琴”的人18 分钟前
C#—LINQ详解及汇总
开发语言·c#·linq
TT哇19 分钟前
练习题 逆波兰表达式求值
java·开发语言
数据小小爬虫28 分钟前
如何利用Python爬虫获得1688按关键字搜索商品
开发语言·爬虫·python
始终奔跑在路上30 分钟前
shell8
开发语言·网络安全
Little丶Seven35 分钟前
Unity Runtime控制编辑器的一些操作
java·unity·编辑器
m0_7493175242 分钟前
蓝桥杯练习生第四天
java·算法·职场和发展·矩阵·蓝桥杯