Comparable和Comparator有什么区别?你知道他们和Arrays.sort的关系吗?
创始人
2024-02-06 05:05:55
0

目录

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 代码案例

class  Student implements Comparable{String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic 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 {@Overridepublic 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() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});System.out.println(Arrays.toString(arr));}//控制台打印结果://[344, 44, 11, 11, 3, 2]
}

相关内容

热门资讯

孟加拉国空军一架教练机在学校坠... 总台记者获悉,据孟加拉国消防部门消息,当地时间21日13时30分左右,孟加拉国空军一架教练机在一所学...
新华视点|多地经开区培育新质生...   近年来,多地经开区立足产业优势,以科技创新为引擎,培育新质生产力。各地通过技术攻关、政策赋能、模...
记者手记丨外国记者在江西感知中...   新华社江西赣州7月21日电记者手记|外国记者在江西感知中国高质量发展  新华社记者黎藜  “人类...
尺素金声丨三个“首次突破”,凸...   出口规模历史同期首次突破13万亿元,同比增长实现7.2%;有进出口实绩的外贸企业历史同期首次突破...
多个全球第一!这份“成绩单”与...   国新办今天举行“高质量完成‘十四五’规划”系列主题新闻发布会,多个部门相关负责人介绍了“十四五”...
欢乐过暑假,安全健康不放假 |...   暑假期间,孩子们宅家吃喝、外出玩乐时,如何做好安全防护,避免意外伤害?关于暑假期间安全与健康的几...
事关“地下生命”,有新发现!   研究显示:地震可为“地下生命”提供“燃料”  一项最新研究显示,地震等地壳内部构造活动瞬间释放的...
俄媒首次公开攻击型无人机生产基...   当地时间7月20日,俄罗斯红星电视台首次曝光位于俄联邦鞑靼斯坦共和国境内的一个无人机生产基地。这...