快速业务通道

java api接口篇(二)下 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
的结果是空(它表示等同性)之外的其它东西,你就做完了:你可以返回结果。如果最重要的部分是相等的,你就应该继续比较次重要部分。在此案例中,只有两个部分 (first name and last name)。如果有更多的部分,你就应该以显而易见的方式继续进行,直到发现两个不相等的部分(否则你就应该比较最不重要的部分),这时,你就可以返回比较结果了。这是 一个建立 Name 对象列表并对它们进行排序的小程序:

import java.util.*; class NameSort { public static void main(String args[]) { Name n[] = { new Name("John", "Lennon"), new Name("Karl", "Marx"), new Name("Groucho", "Marx"), new Name("Oscar", "Grouch") }; List l = Arrays.asList(n); Collections.sort(l); System.out.println(l); } }

如果你运行这个程序,以下是它所打印的结果:

[Oscar Grouch, John Lennon, Groucho Marx, Karl Marx]

对 compareTo 方法的行为有四个限制,我们现在不作一一讨论,因为它们的技术性太强,并且十分枯燥,我们最好将其留在API文本中。但是,所有实现 Comparable 的类都必须接受这些限制的约束,这一点是确实重要的。因此,如果你要编写一个实现Comparable 的类,请读那些有关 Comparable 的文本吧。要试图为违反了那些限制的对象的列表进行排序可能引发不可预知的行为。从技术上讲,这些限制保证了自然排序是实现它的类的对象的部分顺序(partial order)。保证排序被很好地定义是十分必要的。  

比较器(Comparators)

好,到目前为止,你已经了解了自然排序。那么,如果要对某些对象不按自然顺序进行排序,又会怎么样呢?或者,如果你要为某些不实现 Comparable 的对象进行排序呢?为做这些事情,你需要提供一个Comparator。 Comparator 实际就是一个封装了排序的对象。与 Comparable 接口类似,Comparator 接口由一个的方法构成:

public interface Comparator { int compare(Object o1, Object o2); }

compare 方法比较它的两个参数,当第一个参数小于、等于或大于第二个参数时,分别返回一个负整数、空或正整数。如果其中一个参数具有对 Comparator 不适合的类型,compare 方法则扔出一个 ClassCastException。

在上一节中的有关 Comparable 的许多内容也适用Comparator。编写一个 compare 方法几乎等同于编写一个compareTo 方法,除前者是把两个参数都当作参数之外。compare 方法必须象Comparable 的 compareTo 方法一样,服从同样的四个"技术限制"。出于同样的原因, Comparator 必须对它所比较的对象诱发一个 partial order(部分顺序)。

假设你有一个称作 EmployeeRecord 的类:

public class EmployeeRecord implements Comparable { public Name name(); public int employeeNumber(); public Date hireDate(); ... }

java api接口篇(二)下(3)

时间:2010-12-24

我们假设 EmployeeRecord 对象的自然排序是对雇员姓名的排序 (就象上一个例子中所定义的)。不幸的是,老板要求我们提出一个按雇员资历排序的列表。这就意味着我们必须做些额外的工作,但是不多。以下是一个将生成所需列表的程序:

import java.util.*; class EmpSort { static final Comparator SENIORITY_ORDER = new Comparator() { public int compare(Object o1, Object o2) { EmployeeRecord r1 = (EmployeeRecord) o1; EmployeeRecord r2 = (EmployeeRecord) o2; return r2.hireDate().compareTo(r1.hireDate()); } }; static final Collection employees = ... ; // Employee Database  public static void main(String args[]

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号