<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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |