有时候需要对Collection或者不为单一数字的Array进行比较,有两种方法,1是实现Comparable接口,2是实现Comparator接口。

1.ComParable接口

Comparable接口的定义如下:
public interface Comparable<T>

{
    public int compareTo(T o);
}
此方法返回一个int类型的数据,但是此int的值只能是一下三种:
1:表示大于
-1:表示小于
0:表示相等

实例:

package zy.java.lang;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List; public class ComparableTest implements Comparable<ComparableTest>
{
private String id;
private int age; public ComparableTest(String id,int age)
{
this.id = id;
this.age = age;
} public String getId()
{
return id;
} public void setId(String id)
{
this.id = id;
} public int getAge()
{
return age;
} public void setAge(int age)
{
this.age = age;
} @Override
public int compareTo(ComparableTest c)
{
return this.age - c.getAge();
} public static void main(String[] args)
{
//Collection
ComparableTest ct1 = new ComparableTest("a",39);
ComparableTest ct2 = new ComparableTest("b",31);
ComparableTest ct3 = new ComparableTest("c",38); List<ComparableTest> list = new ArrayList<ComparableTest>();
list.add(ct1);
list.add(ct2);
list.add(ct3); Collections.sort(list); for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i).getId());
} System.out.println("-------------------------------------------"); //Array
ComparableTest[] ct = new ComparableTest[]{
new ComparableTest("a",39),
new ComparableTest("b",31),
new ComparableTest("c",38)
}; Arrays.sort(ct); for(int i=0;i<ct.length;i++)
{
System.out.println(ct[i].getId());
}
}
}

2.Comparator接口

如果一个类已经开放完成,但是在此类建立的初期并没有实现Comparable接口,此时肯定是无法进行对象排序操作的,所以为了解决这一的问题,java又定义了另一个比较器的操作接口 Comparator 此接口定义在java.util包中,接口定义如下:
public interface Comparator<T>

{
  public int compare(T o1,T o2);
}

实例:

package zy.java.lang;

public class Users
{
private String id;
private int age; public Users(String id, int age) {
this.id = id;
this.age = age;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

  

package zy.java.lang;

import java.util.*;

public class ComparatorTest implements Comparator<Users>
{
@Override
public int compare(Users o1, Users o2)
{
return o1.getAge() - o2.getAge();
} public static void main(String[] agrs)
{
//Collection
Users u1 = new Users("a",33);
Users u2 = new Users("b",31);
Users u3 = new Users("c",38); List<Users> list1 = new ArrayList<Users>();
list1.add(u1);
list1.add(u2);
list1.add(u3); Collections.sort(list1, new ComparatorTest()); for(int i=0;i<list1.size();i++)
{
System.out.println(list1.get(i).getId());
} System.out.println("-------------------------------------------"); //Array
Users[] u = new Users[]{
new Users("a",39),
new Users("b",31),
new Users("c",38)
}; Arrays.sort(u); for(int i=0;i<u.length;i++)
{
System.out.println(u[i].getId());
}
}
}

 

选择Comparable接口还是Comparator?
一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等。

Java原来如此-比较器(Comparable、Comparator)的更多相关文章

  1. Java 之 比较器( Comparator接口与 Comparable 接口)

    一.定制排序:java.util.Comparator 接口 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collecti ...

  2. Java的比较器Comparable与Comparator

    在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...

  3. 比较器Comparable Comparator

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

  4. Java学习笔记--Comparable & Comparator

    一.    Comparable<T>: Comparable是类内部的比较器,用于创建类的时候实现此接口,同时实现比较方法:对于不能修改源码的类则无法应用此方式进行比较排序等. 源码为: ...

  5. java比较器Comparable接口和Comaprator接口

    Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...

  6. Java学习笔记--集合元素的比较Comparable,Comparator

    原文见: http://www.cnblogs.com/sunflower627/p/3158042.html 1. Comparator 和 Comparable 相同的地方 他们都是java的一个 ...

  7. Java学习之Comparable与Comparator的区别

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...

  8. Java提高十五:容器元素比较Comparable&Comparator深入分析

    我们经常用容器来存放元素,通常而言我们是不关系容器中的元素是否有序,但有些场景可能要求容器中的元素是有序的,这个时候用ArrayList  LinkedList  Hashtable HashMap ...

  9. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

随机推荐

  1. codeforces 484A A. Bits(贪心)

    题目链接: A. Bits time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  2. 如何免费访问Google?

    访问Google方法(以Mac为例) 1.替换hosts文件中的内容,文件链接如下: https://github.com/racaljk/hosts 2.下载Google浏览器,链接如下: http ...

  3. raid知识

    1,raid形象理解(饮水机模型) http://dingyichao.blog.51cto.com/442449/698762     2,raid利用率 3,raid详细理解 raid0 raid ...

  4. 找不到类型{0} 它在 ServiceHost 指令中提供为 Service 特性值

    由于我把binding改成wsHttpBinding,在web.config里也改了命名空间 services的类名也改成了跟 web.config对应的命名空间后 在添加引用后,出现了错误: “找不 ...

  5. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)

    http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...

  6. Vue.js的表格分页组件

    转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更 ...

  7. java从0开始学——数组,一维和多维

    #,在java中,允许数组的长度为0:也就是允许      int[] zeroLenthArray = new int[0]; #,匿名的数组初始化是合法的:     int[] smallPrim ...

  8. js字符串截取函数slice()、substring()、substr()

    摘要 在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与 ...

  9. Windows的Subversion备份脚本

    2015-12-08更新:备份时添加--revision head 只备份最新的版本,已从脚本中移除. 2013-12-09更新:forfiles命令添加错误输出日志. 2013-12-04更新:添加 ...

  10. 自己写了个H5版本的俄罗斯方块

    在实习公司做完项目后,实在无聊.就用H5写了几个游戏出来玩一下.从简单的做起,就搞了个经典的俄罗斯方块游戏. 先上效果: 上面的数字是得分,游戏没有考虑兼容性,只在chrome上测试过,不过大部分现代 ...