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. USB 之传输编码格式 NRZI 介绍

    记录NRZI (Non-Return-to-Zero Inerted code) 非归零翻转编码,之前,我先稍微记录一下他的前身. RZ 编码(Return- to - zero coding) RZ ...

  2. rhel6.5 虚拟机的安装

    一.准备: 在网上下载 rhel-server-6.5-x86_64-dvd.iso 并在 非 C盘下创建一个目录 ,比如:E:\VM\rhel_test 二. 创建虚拟机 进入 VMware , 点 ...

  3. FreeMarker 技术资料与问题解决备忘录

    技术资料: http://www.ibm.com/developerworks/cn/java/j-lo-freemarker/ FM 解析hash序列 output[name = mouse; pr ...

  4. 【Mac双系统设置系统默认启动系统】解决方式

    解决方式1: 开机时长按option键,进入系统选择界面: 用左右方向键选择到你要设置为默认启动的盘, 然后同一时候按下ctrl+enter键.就可以将其设置为默认启动的系统. 解决方式2: 选择ma ...

  5. C++类的实例化对象的大小之sizeof()

    之所以写这篇<C++类的实例化对象的大小之sizeof()>.是由于在參加笔试的时候遇到例如以下这么一道题,当时感觉就是这个一个坑,但.我还是义无反顾的跳了下去,由于存在知识点盲区啊.现, ...

  6. ansible result.stdout.find('running') != -1 判断状态

    [root@m01 ansible-playbook]# cat test_1103.yml ---- hosts: webserver  tasks:    - file: path=/tmp/{{ ...

  7. java-事务-案例

    项目结构: 数据库: /* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.5.53 : Database - threadlocal ************** ...

  8. r绘图基本

    R绘图命令分为三种类型: 高级绘图命令在图形设备上产生一个新的图区,它可能包括坐标轴,标签,标题等等. 低级画图命令会在一个已经存在的图上加上更多的图形元素,例如额外的点,线和标签. 交互式图形命令允 ...

  9. JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比

    1.什么是JVM?   JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是, ...

  10. 关于Cocos Creator用js脚本代码播放骨骼动画的步骤和注意事项

    步骤: 1.用cc.find()方法找到相应的骨骼动画节点,并把这个对象赋值给一个var出来的新对象. 具体代码:var spineboy_anim = cc.find("UI_Root/a ...