java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

java.util
接口 Comparator<T>

所有已知实现类:
Collator, RuleBasedCollator

public interface Comparator<T>

比较函数强行对某些对象 collection 进行整体排序。可以将 Comparator 传递给 sort 方法(如 Collections.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如 TreeSetTreeMap)的顺序。

当且仅当对于一组元素 S 中的每个 e1e2 而言,(compare((Object)e1, (Object)e2)==0)e1.equals((Object)e2) 具有相等的布尔值时,Comparator c 强行对 S 进行的排序才叫做与等号一致 的排序。

当使用具有与等号一致的强行排序能力的 comparator 对有序 set(或有序映射)进行排序时,应该小心谨慎。假定一个带有显式 Comparator c 的有序 set(或有序映射)与从 set S 中抽取出来的元素(或键)一起使用。如果 c 强行对 S 进行的排序与等号一致,那么有序 set(或有序映射)将是行为“怪异的”。尤其是那些将违背根据 equals 所定义 set(或映射)的常规协定的有序 set(或有序映射)。

例如,如果使用 comparator c 将满足 (a.equals((Object)b) && c.compare((Object)a, (Object)b) != 0) 的两个键 ab 添加到有序 set 中,则第二个 add 操作将返回 false(有序 set 的大小没有增加),因为从有序 set 的角度来看,ab 是相等的。

注:通常用 comparator 来实现 java.io.Serializable 是一个好主意,因为它们在可序列化的数据结构(像 TreeSetTreeMap)中可用作排序方法。为了成功地序列化数据结构,comparator(如果已提供)必须实现 Serializable

在算术上,定义给定 comparator c 对给定对象 set S 强行实施整体排序关系式 为:

       {(x, y) such that c.compare((Object)x, (Object)y) <= 0}.
整体排序的 是:
       {(x, y) such that c.compare((Object)x, (Object)y) == 0}.
 
它直接遵循 compare 的协定,商是 S 上的等价关系,自然顺序是 S 上的整体排序。当我们说 c 强行对 S 的排序是与等号一致 时,意思是说自然排序的商是对象的 equals(Object) 方法所定义的等价关系:
       {(x, y) such that x.equals((Object)y)}.
 

此接口是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Comparable, Arrays.sort(Object[], Comparator), TreeMap, TreeSet, SortedMap, SortedSet, Serializable

方法摘要
 int compare(T o1, T o2)
          比较用来排序的两个参数。
 boolean equals(Object obj)
          指示是否其他对象“等于”此 Comparator。
 

方法详细信息

compare

int compare(T o1,
            T o2)
比较用来排序的两个参数。随第一个参数小于、等于或大于第二个参数而分别返回负整数、零或正整数。

实现程序必须确保对于所有的 xy 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 才必须抛出异常。)

实现程序还必须确保关系是可传递的:((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0

最后,实现程序必须确保 compare(x, y)==0 意味着对于所有的 z 而言,都存在 sgn(compare(x, z))==sgn(compare(y, z))

虽然这种情况很普遍,但并 严格要求 (compare(x, y)==0) == (x.equals(y))。一般说来,任何违背了这一点的 comparator 都应该清楚地指出这一事实。推荐的语言是“注意:此 comparator 强行进行与等号一致的排序。”

参数:
o1 - 要比较的第一个对象。
o2 - 要比较的第二个对象。
返回:
随第一个参数小于、等于或大于第二个参数而分别返回负整数、零或正整数。
抛出:
ClassCastException - 如果参数的类型不允许此 Comparator 对它们进行比较。

equals

boolean equals(Object obj)
指示是否其他对象“等于”此 Comparator。此方法必须遵守 Object.equals(Object) 的常规协定。此外,仅当 指定的 Object 也是一个 comparator,并且强行实现与此 comparator 相同的排序时,此方法才返回 true。因此,comp1.equals(comp2) 意味着对于每个对象引用 o1o2 而言,都存在 sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))

注意, 重写 Object.equals(Object) 方法总是 安全的。然而,在某些情况下,重写此方法可以允许程序确定两个不同的 Comparator 是否强行实现了相同的排序,从而提高性能。

覆盖:
Object 中的 equals
参数:
obj - 要进行比较的引用对象。
返回:
仅当指定的对象也是一个 comparator,并且强行实现与此 comparator 相同的排序时才返回 true
另请参见:
Object.equals(java.lang.Object), Object.hashCode()

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策