Comparable是个排序接口,若一个类实现了该接口,那么该类的数组和列表就可以通过Collections.sort或Arrays.sort进行自动排序。该接口中的只有一个compareTo(T o)方法:

public interface Comparable<T> {public int compareTo(T o);
}

实现该接口的类通过重写该方法来定义该类的排序方式;下面我们就通过一个简单的例子来了解下该类的使用。

首先我们定义一个没有实现该方法的实体类Person

public class Person {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person() {}public Person(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "Person{" +"age=" + age +", name='" + name + '\'' +'}';}}

然后写一个测试类来测试当前Person是否支持排序:

public class ComparableTest {public static void main(String[] args) {Person[] persons = new Person[]{new Person(10, "张三"),new Person(15, "李四"),new Person(5, "王五")};System.out.println("排序前");for(Person p : persons){System.out.println(p.toString());}Arrays.sort(persons);//实现Comparable接口后可以通过sort方法来自动排序System.out.println("排序后");for(Person p : persons){System.out.println(p.toString());}}
}

执行结果为:

排序前
Person{age=10, name='张三'}
Person{age=15, name='李四'}
Person{age=5, name='王五'}
Exception in thread "main" java.lang.ClassCastException: XXXXXXXXX.Person cannot be cast to java.lang.Comparableat java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)at java.util.Arrays.sort(Arrays.java:1246)at XXXXXXXXX..ComparableTest.main(ComparableTest.java:13)Process finished with exit code 1

报错java.lang.ClassCastException:Person cannot be cast to java.lang.Comparable.大致意思是说Person类没有实现java.lang.Comparable接口。

下面我们修改下Person类使其实现Comparable类:

public class Person implements Comparable<Person>{private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person() {}public Person(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "Person{" +"age=" + age +", name='" + name + '\'' +'}';}@Overridepublic int compareTo(Person o) {return this.getAge()-o.getAge();}

然后我们看下测试结果:

排序前
Person{age=10, name='张三'}
Person{age=15, name='李四'}
Person{age=5, name='王五'}
排序后
Person{age=5, name='王五'}
Person{age=10, name='张三'}
Person{age=15, name='李四'}Process finished with exit code 0

这里是定义其按照年龄升序排序的,你也可以让其降序排序:只需要修改Person中的compareTo(Person 0)方法。具体如下:

//修改前(按照年龄升序)
@Overridepublic int compareTo(Person o) {return this.getAge()-o.getAge();}
//修改后(按照年龄降序)
@Overridepublic int compareTo(Person o) {return o.getAge()-this.getAge();}

修改后的测试结果如下:

排序前
Person{age=10, name='张三'}
Person{age=15, name='李四'}
Person{age=5, name='王五'}
排序后
Person{age=15, name='李四'}
Person{age=10, name='张三'}
Person{age=5, name='王五'}

java中Comparable的使用相关推荐

  1. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

  2. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

  3. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  4. Java中Comparable和Comparator实现对象比较

    Java中Comparable和Comparator实现对象比较 目录 一. Comparator 二. Comparable 三.比较 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ...

  5. JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

    文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...

  6. Java 中 Comparable 和 Comparator 比较

    为什么80%的码农都做不了架构师?>>>    本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...

  7. java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序

    本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...

  8. Java 中 Comparable 接口的意义和用法.

    在之前的博文中已经介绍了Java中Collection 接口和 Collections类. http://blog.csdn.net/nvd11/article/details/21516075 一, ...

  9. JAVA中Comparable和 Comparator的区别

    Comparable 和 Comparator比较 简介 Comparable 1.1说明 1.2举例 Comparator 1.1说明 1.2举例 相同点: 不同点: 简介 Comparable 和 ...

最新文章

  1. ldconfig动态链接库管理以及修改ld.so.conf.d
  2. shell 中diff返回值_LINUX(中)
  3. 【安全漏洞】一次前台任意文件下载漏洞挖掘
  4. Mysql当前模式让不记录日志_终于有人把MySQL 三大日志讲清楚了
  5. TreeView Checkbox选中
  6. 无csrf防护的html页面,Springs CSRF保护仅* HTML登录页面
  7. CF280D-k-Maximum Subsequence Sum【模拟费用流,线段树】
  8. 【mac apache】了解自带的apache
  9. “webservice远程测试显示 “测试窗体只能用于来自本地计算机
  10. 011235813用java写出来_【JAVA】关于在运行后控制台显示的一些功能问题,请吧友帮我解答...
  11. 超酷的 mip-infinitescroll 无限滚动(无限下拉)
  12. centos创建本地yum仓库
  13. CHIP-SEQ 芯片分析时,对于来自重复实验的数据,怎样进行MACS peaks calling 分析?
  14. win10动态桌面_win10动态桌面如何设置?电脑炫酷动态壁纸
  15. LinuxC高级_day1
  16. ylinux系统找到软件_你的 linux 上都有什么值得推荐的软件?
  17. c语言强制类型转换成整形,C语言强制类型转换
  18. [200814] 自己动手,搞定软件著作权申请(已成功)
  19. JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!
  20. 计算机二级讲座宣传语,计算机二级讲座策划书.doc

热门文章

  1. 133个心情变好的佛家领悟! 推荐哦
  2. Echarts(曲线图)
  3. Unity学习(C#)——匿名方法(lambda)
  4. linux学习27-Ansible(三)剧本
  5. 什么是BMS自动化测试系统?
  6. C# 在word文档中复制表格并粘帖到下一页中
  7. rog枪神7超竞版评测 rog枪神7超竞版 参数配置
  8. 会计凭证增强抬头文本维护失败
  9. 中国制造业国际竞争力的实证方法研究——兼与波特指标及产业分类法比较
  10. Java模拟QQ聊天