Java Comparable接口
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接口相关推荐
- Java Comparable接口的陷阱
Java Comparable接口提供了一种对实现该接口的类进行自然排序的方法. 自然顺序对标量和其他非常简单的对象有意义,但是当我们使用面向业务的领域对象时,自然顺序就变得更加复杂. 从业务经理的角 ...
- java comparable接口作用_Java 中 Comparable 接口的意义和用法
一, 为何需要实现Comparable接口 我们知道Collections类中包含很多对实现Collection接口的容器各种操作的静态方法. 当然, 其中最长用的莫过于排序了(Collections ...
- java comparable接口_Java面试题之Java集合篇三
Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...
- java comparable接口作用_Java Comparable 接口
compareTo()的灵活性 如果我们反复调用上面的compareTo()方法,那么我们可以通过大小来排序,这很棒,但并非故事的结束.如果我们想通过颜色来给苹果排序呢?抑或是重量?我们也可以做到.关 ...
- java comparable接口_浅谈程序接口
· 为什么需要接口?接口和抽象类的区别? 接口就是比"抽象类"还"抽象"的"抽象类",可以更加规范的对子类进行约束.全面地专业地实现了:规范 ...
- Java基础之Comparable接口和Comparator接口的比较
前言 就是普普通通的写这么一篇文章,java集合类估计java程序猿都知道,那就写一点小众的. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那 ...
- Java 中类的比较与排序方法(应用Comparable接口与Comparator接口)通俗易懂
引言 在平时写Java的程序的时候,如果要进行一些基本类型的变量的比较,可以很方便得调用Math.max().Math.min()等方法,如果要对数组或者列表进行排序,也可以用Arrays.sort( ...
- Java 中 Comparable 接口的意义和用法.
在之前的博文中已经介绍了Java中Collection 接口和 Collections类. http://blog.csdn.net/nvd11/article/details/21516075 一, ...
- java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...
最新文章
- Django admin coercing to Unicode: need string or buffer, tuple found
- 有机化学芳烃 芳香性
- 一个调用其他activity的完整例子,使用了 onActivityResult和startActivityForResult
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第10篇]RSA和强RSA问题有什么区别
- html与java接口,JavaWeb学习——Servlet相关的接口和类
- 视频:网站建设-如何利用网络赚大钱2
- iOS 离屏渲染的研究
- 配置使用Powershell管理Azure Stack
- java 正则表达式 替换 html,java 正则表达式 替换 html
- 全国大学生电子设计竞赛参赛分享
- 在线英英词典项目实现
- 小车yolo机械臂(四)python ros 和darknet_ros 使用launch文件启动脚本
- 25 个你可能不知道的 Linux 真相
- linux读和写线程同步,Linux:使用读写锁使线程同步
- 【论文解读IJCAI 2019】Extracting Entities and Events as a Single Task Using a Transition-Based NeuralModel
- 5G推动下,XR的需求“爆发”会来自B端还是C端?
- GCC编译器中三个重要的函数
- Ubuntu-安装汉语拼音输入法
- [转][晓月风瑟推荐]值得用一生来品味的100句凡人语录
- 电脑蓝屏解决方案:DPC WATCHDOG VIOLATION