Comparable和Comparator都可以实现排序,今天我们就开始两种比较排序接口的学习。

Comparable的使用

一、Comparable的文档说明:

Lists (and arrays) of objects that implement this interface can be sorted automatically by Collections.sort (and Arrays.sort). Objects that implement this interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator.

二、Comparable有一个方法需要实现:int compareTo(T o)

Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. 
参数:
o - 要比较的对象。
返回:
        负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
        ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。

三、Comparable的实例代码如下:

定义一个Personal类,实现Comparable类,比较对象是Personal类自己。

package com.huhx.compare;

public class Person implements Comparable<Person> {
private String username;
private int age; public Person(String username, int age) {
this.username = username;
this.age = age;
}
public String getUsername() {
return username;
}public int getAge() {
return age;
}
@Override
public String toString() {
return "username: " + username + ", age: " + age;
} // 先age从小到大排序,如果年龄一样,那么username字符升序排序
@Override
public int compareTo(Person person) {
if (age > person.age) {
return 1;
} else if (age == person.age) {
return username.compareTo(person.username);
} else if (age < person.age) {
return -1;
}
return 0;
}
}

写一个测试类CompareTest.java

package com.huhx.compare;

import java.util.Arrays;

public class CompareTest {
public static void main(String[] args) {
Person[] persons = new Person[4];
persons[0] = new Person("huhx", 22);
persons[1] = new Person("Linux", 23);
persons[2] = new Person("Tomhu", 23);
persons[3] = new Person("Tomhu", 24);
Arrays.sort(persons); for(Person person: persons) {
System.out.println(person);
}
}
}

得到运行结果如下:

username: huhx, age: 22
username: Linux, age: 23
username: Tomhu, age: 23
username: Tomhu, age: 24

Comparator的使用

一、Comparator的文档说明:

A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as sorted sets or sorted maps), or to provide an ordering for collections of objects that don't have a natural ordering.

二、Comparator有一个方法需要实现:int compare(T o1, T o2)

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second

三、Comparator的实例代码如下

定义一个比较的对象Person类:

package com.huhx.compator;

public class Person {
private String username;
private int age; public Person(String username, int age) {
this.username = username;
this.age = age;
} public String getUsername() {
return username;
}public int getAge() {
return age;
} @Override
public String toString() {
return "username: " + username + ", age: " + age;
}
}

定义一个以Person为比较对象的Comparator:

package com.huhx.compator;

import java.util.Comparator;

public class AgeComparator implements Comparator<Person>{
// 先age从小到大排序,如果年龄一样,那么username字符降序排序
@Override
public int compare(Person person1, Person person2) {
int compare = person1.getAge() - person2.getAge();
if (compare == 0) {
return person2.getUsername().compareTo(person1.getUsername());
}
return compare;
}
}

写一个测试类CompatorTest.java

package com.huhx.compator;
import java.util.TreeSet; public class CompatorTest {
public static void main(String[] args) {
AgeComparator comparator = new AgeComparator();
TreeSet<Person> set = new TreeSet<Person>(comparator);
set.add(new Person("huhx", 22));
set.add(new Person("Linux", 23));
set.add(new Person("Tomhu", 23));
set.add(new Person("Tomhu", 24)); for (Person person : set) {
System.out.println(person);
}
}
}

得到运行结果如下:

username: huhx, age:
username: Tomhu, age:
username: Linux, age:
username: Tomhu, age:

友情链接

java基础---->Comparable和Comparator的使用的更多相关文章

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

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  2. Java 中 Comparable 和 Comparator 比较

    Java 中 Comparable 和 Comparator 比较 目录: Comparable Comparator Comparable 和 Comparator比较 第二个例子 之 Compar ...

  3. Java 中 Comparable 和 Comparator 比较(转)

    转自http://www.cnblogs.com/skywang12345/p/3324788.html 本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示 ...

  4. 夯实Java基础(十五)——Java中Comparable和Comparator

    1.前言 对于Java中的对象,我们只能使用基本运算符==.!=来判断一下地址是否相等,不能使用>.<来比较大小.但是在实际的开发中,我们需要对对象进行排序,也就是比较大小,那么应该如何实 ...

  5. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  6. Java中Comparable和Comparator区别小结

    一.Comparable简介 Comparable是排序接口.若一个类实现了Comparable接口,就意味着该类支持排序.实现了Comparable接口的类的对象的列表或数组可以通过Collecti ...

  7. Java中Comparable和Comparator你知多少?

    前言: 我喜欢这种遨游在Java的世界里,精心研究学习新鲜事物的感觉,即便再小再细再微不足道的东西,也让我乐此不疲,同时我也更愿意将我所会的东西分享出来供大家学习以及方便自己日后回顾.好了,闲话不多说 ...

  8. java中Comparable和Comparator两种比较器的区别

    Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较 ...

  9. 【转载】Java中Comparable和Comparator比较

    [本文转自]http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 简介 Comparable 是排序接口. 若一个类实现了Comp ...

随机推荐

  1. CentOs6.5 安装rabbitmq(转)

    // 安装预环境 yum install gcc gcc-c++ yum install zlib zlin-devel ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 / ...

  2. /usr/include/glib-2.0/glib/gtypes.h:34:24: fatal error: glibconfig.h: No such file or directory

    cc -DDEBUG -mtune=core2 -O2 \ -onvideo nvideo.c \ -I/usr/include/atk-1.0 \ -I/usr/include/cairo \ -I ...

  3. DALFactory有什么作用

    DAL是指Data Access Layer.DALFactory是用于创建数据訪问对象的工厂.本质上是採用了抽象工厂的设计模式.目的是支持多种数据訪问层,比方sql server和oracle两种实 ...

  4. 利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看

        一.环境和工具 ubuntu 14.04 desktop 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦. 不建议使用 最新的16TLS,我一开始 ...

  5. 搭建Maven环境——使用本地的maven环境

    1.安装JDK. 2.Maven是 Apache 下的一个项目,官网下载 Maven:http://maven.apache.org/download.cgi 系统变量:M2_HOME= G:\vis ...

  6. 自己写的jQuery 左右选择框,大家多多指教!

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  7. Hive SQL执行流程分析

    转自 http://www.tuicool.com/articles/qyUzQj 最近在研究Impala,还是先回顾下Hive的SQL执行流程吧. Hive有三种用户接口: cli (Command ...

  8. 获取FirefoxProfile配置文件以及使用方法介绍

    使用默认方式构建的(WebDriver)FirefoxDriver实例: WebDriver driver = new FirefoxDriver(); 这种方式下,打开的Firefox浏览器将是不带 ...

  9. 奇怪的bug:javascript不执行

    背景:有人想要个简单的js效果,点击某个菜单,其他菜单收起. 说了下思路,结果~~ 只好直接写了一个,代码如下: <!DOCTYPE html> <html> <head ...

  10. 第二百九十三,Memcached缓存

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...