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

}
相关推荐
m0_74825502几秒前
头歌答案--爬虫实战
java·前端·爬虫
肖田变强不变秃13 分钟前
C++实现矩阵Matrix类 实现基本运算
开发语言·c++·matlab·矩阵·有限元·ansys
小白的一叶扁舟19 分钟前
深入剖析 JVM 内存模型
java·jvm·spring boot·架构
sjsjsbbsbsn27 分钟前
基于注解实现去重表消息防止重复消费
java·spring boot·分布式·spring cloud·java-rocketmq·java-rabbitmq
苹果醋329 分钟前
golang 编程规范 - Effective Go 中文
java·运维·spring boot·mysql·nginx
沈霁晨29 分钟前
Ruby语言的Web开发
开发语言·后端·golang
小兜全糖(xdqt)31 分钟前
python中单例模式
开发语言·python·单例模式
DanceDonkey32 分钟前
@RabbitListener处理重试机制完成后的异常捕获
开发语言·后端·ruby
Python数据分析与机器学习40 分钟前
python高级加密算法AES对信息进行加密和解密
开发语言·python
军训猫猫头1 小时前
52.this.DataContext = new UserViewModel(); C#例子 WPF例子
开发语言·c#·wpf