java.lang.Comparable

我们知道基本数据类型的数据(除boolean类型外)需要比较大小的话,之间使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个问题呢?

Java给所有引用数据类型的大小比较,指定了一个标准接口,就是java.lang.Comparable接口:

那么我们想要使得我们某个类的对象可以比较大小,怎么做呢?

第一步:哪个类的对象要比较大小,哪个类就实现java.lang.Comparable接口,并重写方法

  • 方法体就是你要如何比较当前对象和指定的另一个对象的大小

第二步:对象比较大小时,通过对象调用compareTo方法,根据方法的返回值决定谁大谁小。

  • this对象(调用compareTo方法的对象)大于指定对象(传入compareTo()的参数对象)返回正整数

  • this对象(调用compareTo方法的对象)小于指定对象(传入compareTo()的参数对象)返回负整数

  • this对象(调用compareTo方法的对象)等于指定对象(传入compareTo()的参数对象)返回零

public class Student implements Comparable {private String name;private int age;private int score;public Student(String name, int age, int 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 int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", score=" + score +'}';}//年龄相同,按照成绩排,成绩相同按照名字排序@Overridepublic int compareTo(Object o) {Student s = (Student) o;int i = this.age - s.age;//比较年龄i = i == 0 ? this.score - s.score : i;//年龄相同,再比较分数i = i == 0 ? this.name.compareTo(s.name) : i;//分数也相同,比较姓名return i;}}

测试类:

public class Demo {public static void main(String[] args) {Student s1 = new Student("tom", 19, 96);Student s2 = new Student("jack", 18, 88);Student s3 = new Student("rose", 20, 90);Student s4 = new Student("jerry", 18, 96);Student s5 = new Student("james", 19, 96);Student s6 = new Student("tom", 19, 96);//创建数组,存储5个学生对象Student[] stus = new Student[6];stus[0] = s1;stus[1] = s2;stus[2] = s3;stus[3] = s4;stus[4] = s5;stus[5] = s6;//冒泡排序for (int i = 0; i < stus.length - 1; i++) {for (int j = 0; j < stus.length - 1 - i; j++) {//比较元素大小,并交换位置if (stus[j].compareTo(stus[j + 1]) > 0) {Student temp = stus[j];stus[j] = stus[j + 1];stus[j + 1] = temp;}}}//遍历数组for (int i = 0; i < stus.length; i++) {System.out.println(stus[i]);}}
}

运行结果

Java Comparable接口相关推荐

  1. Java Comparable接口的陷阱

    Java Comparable接口提供了一种对实现该接口的类进行自然排序的方法. 自然顺序对标量和其他非常简单的对象有意义,但是当我们使用面向业务的领域对象时,自然顺序就变得更加复杂. 从业务经理的角 ...

  2. java comparable接口作用_Java 中 Comparable 接口的意义和用法

    一, 为何需要实现Comparable接口 我们知道Collections类中包含很多对实现Collection接口的容器各种操作的静态方法. 当然, 其中最长用的莫过于排序了(Collections ...

  3. java comparable接口_Java面试题之Java集合篇三

    Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...

  4. java comparable接口作用_Java Comparable 接口

    compareTo()的灵活性 如果我们反复调用上面的compareTo()方法,那么我们可以通过大小来排序,这很棒,但并非故事的结束.如果我们想通过颜色来给苹果排序呢?抑或是重量?我们也可以做到.关 ...

  5. java comparable接口_浅谈程序接口

    · 为什么需要接口?接口和抽象类的区别? 接口就是比"抽象类"还"抽象"的"抽象类",可以更加规范的对子类进行约束.全面地专业地实现了:规范 ...

  6. Java基础之Comparable接口和Comparator接口的比较

    前言 就是普普通通的写这么一篇文章,java集合类估计java程序猿都知道,那就写一点小众的. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那 ...

  7. Java 中类的比较与排序方法(应用Comparable接口与Comparator接口)通俗易懂

    引言 在平时写Java的程序的时候,如果要进行一些基本类型的变量的比较,可以很方便得调用Math.max().Math.min()等方法,如果要对数组或者列表进行排序,也可以用Arrays.sort( ...

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

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

  9. java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法

    原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...

最新文章

  1. Django admin coercing to Unicode: need string or buffer, tuple found
  2. 有机化学芳烃 芳香性
  3. 一个调用其他activity的完整例子,使用了 onActivityResult和startActivityForResult
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第10篇]RSA和强RSA问题有什么区别
  5. html与java接口,JavaWeb学习——Servlet相关的接口和类
  6. 视频:网站建设-如何利用网络赚大钱2
  7. iOS 离屏渲染的研究
  8. 配置使用Powershell管理Azure Stack
  9. java 正则表达式 替换 html,java 正则表达式 替换 html
  10. 全国大学生电子设计竞赛参赛分享
  11. 在线英英词典项目实现
  12. 小车yolo机械臂(四)python ros 和darknet_ros 使用launch文件启动脚本
  13. 25 个你可能不知道的 Linux 真相
  14. linux读和写线程同步,Linux:使用读写锁使线程同步
  15. 【论文解读IJCAI 2019】Extracting Entities and Events as a Single Task Using a Transition-Based NeuralModel
  16. 5G推动下,XR的需求“爆发”会来自B端还是C端?
  17. GCC编译器中三个重要的函数
  18. Ubuntu-安装汉语拼音输入法
  19. [转][晓月风瑟推荐]值得用一生来品味的100句凡人语录
  20. 电脑蓝屏解决方案:DPC WATCHDOG VIOLATION

热门文章

  1. Java图片滑动验证码
  2. Linux wc命令使用
  3. WeRide to a Better World | 文远知行2019-2020校招启动!
  4. 机器学习、数据挖掘、深度学习的几个宝藏公众号
  5. JavaCV依赖精简(Java OpenCV依赖精简)
  6. 计算机系统与手机系统,中国什么时候才有国产电脑系统和手机系统?
  7. oracle sub share pool简介以及 共享sql实现实质。
  8. mac系统搭建JAVA开发环境【按步骤一步一步来,能完美搭建好环境】
  9. dataTables使用
  10. Macbook键盘的使用基础技巧_我是亲民_新浪博客