博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java Comparable和Comaprator的对比
阅读量:5937 次
发布时间:2019-06-19

本文共 4143 字,大约阅读时间需要 13 分钟。

 

Comparable使一个class具备不同实例间进行比较的行为。这些对象的集合,可作为Collections.sort或Arrays.sort的参数

Comparator可以看成一种算法的实现,将算法和数据分离。实现Comparator的可以作为Collections.sort或Arrays.sort的参数

都可以多条件排序。类似于order by field1,field2

都是接口

 

 

import java.util.Arrays;import java.util.Comparator;public class UserComparator implements Comparator
{ /** * * @param source * @param target * @return 负数:升序;0:顺序不变;正数:降序 */ @Override public int compare(User source, User target) { int result = source.getAge() - target.getAge(); System.out.println(result); return result; } public static void main(String[] args) { User[] users = new User[]{
new User("a", 30), new User("b", 20)}; Arrays.sort(users, new UserComparator()); for (int i = 0; i < users.length; i++) { User user = users[i]; System.out.println(user.getId() + " " + user.getAge()); } }}class User { private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; }}

 

 

import java.util.Arrays;public class User implements Comparable
{ private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public int compareTo(User target) { int result = this.age - target.getAge(); System.out.println(result); return result; } public static void main(String[] args) { User[] users = new User[]{
new User("a", 30), new User("b", 20)}; Arrays.sort(users); for (int i = 0; i < users.length; i++) { User user = users[i]; System.out.println(user.getId() + " " + user.getAge()); } }}

 

实例如下:

class Student implements Comparable
{ 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) { // TODO Auto-generated method stub if(this.score>o.score)//score是private的,为什么能够直接调用,这是因为在Student类内部 return -1;//由高到底排序 else if(this.score
o.age) return 1;//由底到高排序 else if(this.age

程序运行结果:

sunliu 22 100.0

wangwu 20 99.0
zhangsan 20 90.0
lisi 22 90.0

但是在设计类的时候,往往没有考虑到让类实现Comparable接口,那么我们就需要用到另外的一个比较器接口Comparator。

从上面的实例我们可以发现,compareTo(T o)只有一个参数,而Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。

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
{ @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.getAge()) return 1; else if(o1.getAge()

上述程序的运行结果与代码实例1一样。

 

 

 

 

 

 

 

转载地址:http://oyvtx.baihongyu.com/

你可能感兴趣的文章
测试之路
查看>>
终于对了
查看>>
RabbitMQ集群
查看>>
Apache防盗链和隐藏版本信息
查看>>
ARP协议与路由
查看>>
SCI检索介绍
查看>>
Android开发之生成自己的签名文件及App签名打包
查看>>
如何提高阿里云上应用的可用性(二)
查看>>
云宏WinCloud前端工程师告诉你什么是UI扁平化
查看>>
如何压缩PDF文件,有什么简单的方法
查看>>
SpringMVC常用注解标签详解
查看>>
day18 Set集合
查看>>
Oracle event之db file read
查看>>
ORA 00600 [ktrexc_1]
查看>>
Docker 安装
查看>>
查询文件系统容量与每个目录的容量
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
wdcp 安装
查看>>