java厚积薄发之Comparable与Comparator的使用
来源:互联网 发布:淘宝放单主持有风险吗 编辑:程序博客网 时间:2024/06/13 02:02
一.java比较器
java的比较器有两类,分别是Comparable接口和Comparator接口。
java的比较器有两类,分别是Comparable接口和Comparator接口。
在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。
让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()(或者Collections.sort)来排序对象数组。
Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
比较规则:
等同于:
结果:
三.Comparator的使用
总结:
一般在设计类的时候,往往没有考虑到让类实现Comparable接口,那么我们就需要用到另外的一个比较器接口Comparator。
从上面的实例我们可以发现,compareTo(T o)只有一个参数,而Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。
Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
比较规则:
int compare(Object o1, Object o2) 返回一个基本类型的整型如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)如果要按照降序排序 则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)
等同于:
//此为升序@Overridepublic int compare(Person p1, Person p2) { return p1.getAge() - p2.getAge(); } //此为降序@Overridepublic int compare(Person p1, Person p2) { return p2.getAge() - p1.getAge(); }
总而言之Comparable是自已完成比较,Comparator是外部程序实现比较。
下面用两种方法来比较Student类的对象年龄的大小:
二.Comparable的使用下面用两种方法来比较Student类的对象年龄的大小:
class Student implements Comparable<Student>{ private String name; private int age; private float score; public Student(String name, int age, float score) { this.name = name; this.age = age; this.score = score; } public String toString() { return name+"\t\t"+age+"\t\t"+score; } @Override public int compareTo(Student o) { if(this.score>o.score) return -1;//分数由高到底排序 else if(this.score<o.score) return 1; else{ if(this.age>o.age) return 1;//年龄由低到高排序 else if(this.age<o.age) return -1; else return 0; } }}
public class ComparableDemo01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Student stu[]={new Student("zhangsan",20,90.0f), new Student("lisi",19,90.0f), new Student("wangwu",18,99.0f), new Student("sunliu",17,100.0f)}; java.util.Arrays.sort(stu); for(Student s:stu) { System.out.println(s); } }}
结果:
sunliu 17 100.0wangwu 18 99.0zhangsan 19 90.0lisi 20 90.0
三.Comparator的使用
package edu.sjtu.ist.comutil;import java.util.Comparator;class Student { private String name; private int age; private float score; public Student(String name, int age, float 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 float getScore() { return score; } public void setScore(float score) { this.score = score; } public String toString() { return name+"\t\t"+age+"\t\t"+score; }}class StudentComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { // TODO Auto-generated method stub if(o1.getScore()>o2.getScore()) return -1; else if(o1.getScore()<o2.getScore()) return 1; else{ if(o1.getAge()>o2.getAge()) return 1; else if(o1.getAge()<o2.getAge()) return -1; else return 0; } }}
public class ComparableDemo02 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Student stu[]={new Student("zhangsan",20,90.0f), new Student("lisi",19,90.0f), new Student("wangwu",18,99.0f), new Student("sunliu",17,100.0f)}; java.util.Arrays.sort(stu,new StudentComparator()); for(Student s:stu) { System.out.println(s); } }}
总结:
一般在设计类的时候,往往没有考虑到让类实现Comparable接口,那么我们就需要用到另外的一个比较器接口Comparator。
从上面的实例我们可以发现,compareTo(T o)只有一个参数,而Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。
1 0
- java厚积薄发之Comparable与Comparator的使用
- Java之Comparable与Comparator的区别
- Java中Comparator与Comparable的使用
- java之Comparator与Comparable
- Comparable与Comparator的使用
- Comparable与Comparator的使用
- Java的comparable与comparator
- java Comparable接口与Comparator接口的使用与区别
- Comparable与Comparator之区别与使用
- Java 7之基础 - Comparable与Comparator
- java Comparator 与Comparable
- Java之Comparable,Comparator
- comparator接口与Comparable接口的使用
- 接口 Comparable与Comparator的区别 (Java)
- java中comparator与comparable的解析
- Java中的Comparable与Comparator的区别
- Java中Comparable与Comparator的区别
- Java中Comparable与Comparator的区别
- cocos2dx libluacocos2d 无法解析的外部符号
- Vijos P1418 公司聚会
- GitHub系列----Git速成
- ajax处理php返回json数据的实例代码
- iOS 手机rvictl抓包
- java厚积薄发之Comparable与Comparator的使用
- Node.js操作redis示例及常用命令汇总
- 使用Bmob时遇到的Android依赖包冲突(Gson、Okhttp)
- JS中用for循环解决重复定义的问题
- 百度sdk不显示地图
- 科大讯飞语音播报
- MyEclipse下Maven的安装配置
- 五、Liunx 文件权限管理(二)变更文件所有者
- exe4j 安装教程