<<Java>> Comparable、Comparator?和Arrays.sort的关系?

目录

Comparable 和 Comparator 的介绍

什么时候使用??

Arrays.sort 重载的四类方法

Comarable 与 sort 代码案例

Comparator 与 sort 代码案例


Comparable 和 Comparator 的介绍

  • Comparable是   排序接口 ,只有一个方法 compareTo ,如果 想让一个类可以通过Arrays.sort() 方法进行排序,则可以让这个类继承Comparable接口 重写这个方法。
  • Comparator 是  比较接口 ,如果一个类本身不支持排序(即没有实现Comparable接口),但你又不能改动这个类,就可以写一个类(这个类又叫“比较器”) 实现Comparator接口, 然后重写Compare方法。我们想要排序的时候,就可以把这类的实例化对象传入到Arrays.sort() 这个方法里。 

什么时候使用??

Comparable :当我们自己写一个类的时候 ,可以用这个方法 实现自己想要的比较规则

Comparator  :当一个类 没有比较器 ,或者我们原本的比较器中的规则 不是我们想要的

Arrays.sort 重载的四类方法

  • sort( T[] a )  对指定T型数组按数字升序排序。
  • sort( T[] a , int formIndex , int toIndex )  对指定T型数组的指定范围按数字升序排序。
  • sort( T[] a , Comparator<? supre T> c )  根据指定比较器产生的顺序对指定对象数组进行排序。
  • sort( T[] a , int formIndex , int toIndex , Comparator<? supre T> c根据指定比较器产生的顺序对指定对象数组的指定对象数组进行排序。

Comarable 与 sort 代码案例

class  Student implements Comparable<Student>{
    String name;
    int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Student o) {
        return this.age - o.age;
    }
}
public class TestComparable{
    public static void main(String[] args) {
        Student[] arr = new Student[]{new Student("aa",11),
                new Student("bb",22),new Student("cc",15)};
        Arrays.sort(arr);
        for (Student student : arr) {//打印出排序的结果
            System.out.println("name:" + student.name + "  age:" + student.age);
        }
        //控制台打印结果: 我们可以看到 按照我们重写的CompareTo的规则(年龄)进行排序了
        //name:aa  age:11
        //name:cc  age:15
        //name:bb  age:22
    }
}

Comparator 与 sort 代码案例

//我们写一个实现Comparator的类,然后重写compare方法
class MyComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
}
public class TestComparator {
    public static void main(String[] args) {
        Integer[] arr = {2, 3, 44, 11, 344, 11};
        MyComparator cmp = new MyComparator();
        Arrays.sort(arr, cmp);//arr是数组,cmp是传入这个类
        System.out.println(Arrays.toString(arr));
    }
    //控制台打印结果:
    //[344, 44, 11, 11, 3, 2]
}

而在真正写代码的时候 我们一般 通过匿名内部类的方法 去写一个比较器比如下面

public class TestComparator {
    public static void main(String[] args) {
        Integer[] arr = {2,3,44,11,344,11};
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(arr));
    }
    //控制台打印结果:
    //[344, 44, 11, 11, 3, 2]
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TestDevHub测试宝库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值