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

<b>查抄Comparator接口的契约义务</b>[Java编程]

赞助商链接



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

java.util.Comparator接口简单被实现并利用,但是在Comparator的API文档里有些部份还是该当细心阅读一下的.

实现了Comparator接口的类可以传给比方Collections.sort这样的排序办法.它们也可以被Map大概Set类利用,用来保证Map大概Set里的元素始终是按某种次序布列的.TreeSet和TreeMap就是这样的类.

在Comparator接口里,只有一个办法是需求实现的:

int compare(Object o1,Object o2);

假如o1小于o2,返回一个负数;假如o1大于o2,返回一个正数;假如他们相等,则返回0;

这些就是普通为了完成对比所要做的一切,但是在Comparator接口的契约里还有别的义务.

首先,compare办法一定如果对称的,意思是compare(a,b)返回的后果要跟compare(b,a)相反.相反的后果意味着,要末返回的值带有差别的正负号,要末都是0.注意,象compare(a,b)返回4而compare(b,a)返回-2这样的情形是合理的.办法里常常大概抛出非常,在这个办法里抛出非常也如果对称的.假如调用compare(a,b)时抛出了一个ClassCastException非常,那么调用compare(b,a)时也必须抛出一个ClassCastException非常.

考虑下面的代码片断:

public int compareTo(Object o1, Object o2) {
if(o1 instanceof Long) {
Long ln = (Long)o1;
return ln.compareTo(o2);
} else {
return 0;
}
}

假如a是new Long(5),b是”Text”,那么履行compare(o1,o2)将在java.lang.Long的compareTo办法里抛出一个ClassCastException,而履行compare(o2,o1)时将返回0(译者注:原文这里是compare(o1,o2),按照上下文,应当是compare(o2,o1)).

其次,任何你预备重用的Comparator都必须是可序列化的.TreeSet和TreeMap类存储Comparator以便举行对比,因此为了这两个类能被序列化,它们利用的Comparator也必须能被序列化.

第三,假如举行对比操作时,有多种对比办法,那么Comparator该当实现equals办法.开辟者成立有多种对比情势的Comparator是很常见的,比方:

import java.util.Comparator;
public class ExampleComparator {
private int type;
public ExampleComparator(int i) {
this.type = i;
}
public int compareTo(Object o1, Object o2) {
if(type == 1) {
// one type of comparison
....
} else
if(type == 2) {
// another form of comparison
....
}
}
}

Comparator接口,普通被Collections.sort办法利用,它是JAVA中需求理解的一个很重要的部份,因为它有一些重要的契约义务,而它们常常被忽视了.


  以上是“<b>查抄Comparator接口的契约义务</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 .