• 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 c )  根据指定比较器产生的顺序对指定对象数组进行排序。
    • sort( T[] a , int formIndex , int toIndex , Comparator c根据指定比较器产生的顺序对指定对象数组的指定对象数组进行排序。

    Comarable 与 sort 代码案例

    1. class Student implements Comparable{
    2. String name;
    3. int age;
    4. public Student(String name, int age) {
    5. this.name = name;
    6. this.age = age;
    7. }
    8. @Override
    9. public int compareTo(Student o) {
    10. return this.age - o.age;
    11. }
    12. }
    13. public class TestComparable{
    14. public static void main(String[] args) {
    15. Student[] arr = new Student[]{new Student("aa",11),
    16. new Student("bb",22),new Student("cc",15)};
    17. Arrays.sort(arr);
    18. for (Student student : arr) {//打印出排序的结果
    19. System.out.println("name:" + student.name + " age:" + student.age);
    20. }
    21. //控制台打印结果: 我们可以看到 按照我们重写的CompareTo的规则(年龄)进行排序了
    22. //name:aa age:11
    23. //name:cc age:15
    24. //name:bb age:22
    25. }
    26. }

    Comparator 与 sort 代码案例

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

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

    1. public class TestComparator {
    2. public static void main(String[] args) {
    3. Integer[] arr = {2,3,44,11,344,11};
    4. Arrays.sort(arr, new Comparator() {
    5. @Override
    6. public int compare(Integer o1, Integer o2) {
    7. return o2-o1;
    8. }
    9. });
    10. System.out.println(Arrays.toString(arr));
    11. }
    12. //控制台打印结果:
    13. //[344, 44, 11, 11, 3, 2]
    14. }

  • 相关阅读:
    从图片中识别文字的软件?这篇文章也许可以回答你的问题
    MySQL数据库——修改表
    Java之File类的详细解析及小练习
    Redis(四)多级缓存
    HDLBits-Rule110
    k8s pod访问策略及使用service访问集群中的pod
    JetBrains WebStorm 2024 mac/win版:效率至上,编码无忧
    爱看广场舞的老爷爷的笔记----strip命令
    软件测试工程师如何对算法做测试?
    springboot---优雅永不过时
  • 原文地址:https://blog.csdn.net/qq_52328493/article/details/127953323