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. 配置TOMCAT 修改默认ROOT路径

    本文转载http://xxs673076773.iteye.com/blog/1134805 最合适的) 最直接的办法是,删掉tomcat下原有Root文件夹,将自己的项目更名为Root. 我在$to ...

  2. 【SpringMVC笔记】第四课 注解的处理器映射器和处理器适配器使用

    一.注意点: 版本问题 spring3.2以前的版本,注解的映射器和适配器使用以下两个类. org.springframework.web.servlet.mvc.annotation.Default ...

  3. Redis Key 过期策略

    redis 官方提供的 conf https://raw.github.com/antirez/redis/2.2/redis.conf 中6中过期策略的具体方式.redis 中的默认的过期策略是vo ...

  4. 我的开源主页Blog Lite配置指南

    JinHengyu.github.io --- Blog Lite 0.1.1 好看的东西看多了就会不好看, 简单的东西永远不会难看 GitHub Pages 提供静态网站托管服务的厂商还是很多的, ...

  5. LINQ教程二:LINQ操作语法

    LINQ查询时有两种语法可供选择:查询表达式语法(Query Expression)和方法语法(Fluent Syntax). 一.查询表达式语法 查询表达式语法是一种更接近SQL语法的查询方式. L ...

  6. StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(三)手机端

    原文地址:http://blog.starrtc.com/?p=111 这篇来介绍一下整个项目的手机端部分.在上一篇里我们已经将sdk导入到项目中了,下边直接用即可. 1 登录StarRTC的服务跟小 ...

  7. 从 QA 到 EP

    两三年以前,和友人谈到 QA(软件质量保证) 这个行业,还有 QA 这个团队的未来,就有了一丝忧虑.而现在,终于有机会实践一下自己之前的想法,在这里分享给大家. 从我有限的从业经验到现在,经历了很多次 ...

  8. Qt 线程基础(QThread、QtConcurrent等)

    [-] 使用线程 何时使用其他技术替代线程 应该使用 Qt 线程的哪种技术 Qt线程基础 QObject与线程 使用互斥量保护数据的完整 使用事件循环防止数据破坏 处理异步执行 昨晚看Qt的Manua ...

  9. 关于Struts2的action的execute方法

    这个方法必须要有一个String类型的返回值,所以如果写很多if else的话,记得要在最后加一个else,就是无论如何就会放回一个字符串,否则编译会报错,在execute方法名字下面有红线.

  10. nodejs基础 -- NPM 使用介绍

    npm:是nodejs的包管理工具,随NodeJS一起安装的,能解决NodeJS代码部署上的很多问题,如: 1.允许用户从NPM服务器下载别人编写的第三方包到本地使用. 2.允许用户从NPM服务器下载 ...