当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

<b>Comparator(Java 2 Platform SE 5.0)</b>[Java编程]

赞助商链接



  本文“<b>Comparator(Java 2 Platform SE 5.0)</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

public interface Comparator<T>

对比函数强行对某些对象 collection 举行整体排序.可以将 Comparator 传送给 sort 办法(如 Collections.sort),从而答应在排序次序上实现切确掌握.还可以利用 Comparator 来掌握某些数据构造(如 TreeSet 或 TreeMap)的次序.

当且仅当关于一组元素 S 中的每个 e1 和 e2 而言,(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) 的两个键 a 和 b 增添到有序 set 中,则第二个 add 操作将返回 false(有序 set 的大小没有增添),因为从有序 set 的角度来看,a 和 b 是相等的.

注:普通用 comparator 来实现 java.io.Serializable 是一个好主张,因为它们在可序列化的数据构造(像 TreeSet、TreeMap)中可用作排序办法.为了成功地序列化数据构造,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(To1, To2)
对比用来排序的两个参数.
boolean equals(Objectobj)
指导能否其他对象“等于”此 Comparator.
 

办法具体信息

compareint compare(To1,
      To2)
对比用来排序的两个参数.随第一个参数小于、等于或大于第二个参数而辨别返回负整数、零或正整数.

实现程序必须确保关于全部的 x 和 y 而言,都存在 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 对它们举行对比.equalsboolean equals(Objectobj)指导能否其他对象“等于”此 Comparator.此办法必须服从 Object.equals(Object) 的通例协议.此外,仅当 指定的 Object 也是一个 comparator,并且强行实现与此 comparator 相同的排序时,此办法才返回 true.因此,comp1.equals(comp2) 意味着关于每个对象引用 o1 和 o2 而言,都存在 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()


  以上是“<b>Comparator(Java 2 Platform SE 5.0)</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .