考虑实现Comparable接口

compareTo方法

Comparable接口的唯一方法,允许进行简单的等同性比较,允许执行顺序比较

Comparable接口被所有值类实现.所以如果一个值类有非常明显的内在排序关系,应该考虑实现该接口

public interface Comparable{

int compareTo(T t);

}

它的通用约定与equals相似  -- 自反性:sgn(x.compareTo(y))==-sgn(y.compareTo(x))
传递性:(x.compareTo(y)>0&&y.compareTo(z)>0);x.compareTo(z)>0
对称性:x.compareTo(y)==0,sgn(x.compareTo(z))==sgn(y.compareTo(z))
(x.compareTo(y)==0)==(x.equals(y)) 如果颠倒了两个对象引用之间的比较方向,由compareTo方法施加的等同性测试,也一定准守相同于equals的约定所施加的条件
所以,在无法用新的值组件扩展可实例化的类时,同时保持compareTo约定,除非愿意放弃面向对象的抽象优势 如果你需要使用一个非标准化的排序关系,就需要为你的类写一个显式的Comparator
//类中的泛型为类本身,所以引用本类只能与其他的本类引用进行比较
public final class CaseInsensitiveString implements Comparable<CaseInsensitiveString>{
public int compareTo(CaseInsensitiveString cis){
return String.CASE_INSENSITIVE_ORDER.compare(s,cis.s);
}
}
比较整数型域
//PhoneNumber是一个储存电话号码得类,第九条始终要覆盖equals中有提到
public int compareTo(PhoneNumber pn){
int areaCodeDiff = areaCode - pn.areaCode;
if(areaCodeDiff!=0){
return areaCodeDiff;
}
}

EffectiveJava(12)考虑实现Comparable接口的更多相关文章

  1. 12.Java中Comparable接口,Readable接口和Iterable接口

    1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...

  2. Item 12 考虑实现Comparable接口

    1.Comparable接口,用来做什么. 2.判定类实现的Comparable接口是否正确的方法. 3.不要扩展一个已经实现了Comparable接口的类来增加用于比较的值组件.     1.Com ...

  3. 第12条:考虑实现Comparable接口

    CompareTo方法没有在Object中声明,它是Comparable接口中的唯一的方法,不但允许进行简单的等同性比较,而且允许执行顺序比较.类实现了Comparable接口,就表明它的实例具有内在 ...

  4. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  5. 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程

    参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...

  6. Java - 谨慎实现Comparable接口

    类实现了Comparable接口就表明类的实例本身具有内在的排序关系(natural ordering). 因此,该类可以与很多泛型算法和集合实现进行协作. 而我们之需要实现Comparable接口唯 ...

  7. Java之comparable接口

    comparable 接口: 1. 问题:java.util.Collections 类中的方法 Collections.sort(List list) 是根据什么确定容器中对象的“大小”顺序的? 2 ...

  8. Java的Comparable接口的一个陷阱

    转载自:http://my.oschina.net/jack230230/blog/56339 Java的Comparable接口提供一个对实现了这个接口的对象列表进行排序的办法.原始的排序对于简单的 ...

  9. 关于comparable接口

    参考博客: https://blog.csdn.net/nvd11/article/details/27393445 第一个例子 @Test public void fun1(){ List list ...

随机推荐

  1. Codeforces Round #336 (Div. 2) A

    A. Saitama Destroys Hotel time limit per test 1 second memory limit per test 256 megabytes input sta ...

  2. vue倒计时页面

    https://www.cnblogs.com/sichaoyun/p/6645042.html https://blog.csdn.net/sinat_17775997/article/detail ...

  3. HDU 3389 Game (阶梯博弈)

    Game Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status D ...

  4. Oracle clob 操作

    --Oracle clob 操作 -- Created on 2015/4/8 by TianPing declare -- Local variables here v_clob1 Clob; v_ ...

  5. 信息传递(NOIP2015)(寻找最小环。。)

    原题传送门 这是一道寻找最小环的题目. 在做的时候给每一个点染色.. 防止再做已经搜过的点(优化) v[]表示是否访问的过,以及第一次访问该点的时间. u[]表示染色.. 这道题还可以用拓补排序做. ...

  6. 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  7. 数据库函数:sqlite3_exec() SQL语句

    函数:sqlite3_exec(),称为便捷函数,封装了好多任务. 函数声明: int  sqlite3_exec( sqlite   * , const  char * sql , sqlite_c ...

  8. app:compileDebugNdk,NDK

    Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files ...

  9. SQLSERVER2008以上版本的数据恢复

    这哥们真不错... http://blog.csdn.net/dba_huangzj/article/details/8491327

  10. C#实时读取数据----局部页面刷新【转】

    I)现在刚开始学习C#,对一些基本的控件了解的不够,有个实时监控的系统,需要页面中的数据每5秒钟刷新一次, 要是每5秒钟页面全部的刷新,那页面根本就没法看了,对这个问题在CSDN上也专门开了帖子,问了 ...