`

Java Comparable接口分析与实践

阅读更多

此接口对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。

 

实现此接口的对象列表(和数组)可以通过Collections.sort或者Arrays.sort进行自动排序,这个两个排序实现使用的时快速排序。实现此接口的对象可以用作有序映射(SortedMap<T,V>)中的键或者(SortedSet<T>)中的元素,无需指定比较器。

 

建议最好使自然排序与equals结果一致。这是因为在使用自然排序与equals不一致时,没有显示比较器的有序集合行为“怪异”,尤其是这样的有序集合违背了根据euqlas方法定义的集合(或者映射表)的常规协定。

 

java.math.BigDecimal是个例外,自然排序排序值相等,当精确值不等的BigDecimal被视为相等。

 

一旦数实现了Comparable接口,你就可以跟许多泛型算法以及依赖域该接口的集合实现进行协助。你付出很小的努力就可以获得非常强大的功能。事实上,Java平台类库中的所有值类都实现了Comparable接口。如果你正在编写一个值类,它具有非常明显的内在排序,比如按字母排序、按数字排序或者按照年代排序,那你就坚决考虑实现该接口。

 

如果一个类有很多关键域,那么按照什么样的顺序来比较这些域非常重要。你必须从最关键的域开始,逐步进行比较,一次带最次要的域。一电话号码为例子。PhoneNumber类的comparaTo方法来作为实例说明:

 

public class PhoneNumber implements Comparable<PhoneNumber> {
    
    int areaCode;// 区号
    int prefix;// 前缀
    int lineNumber;// 市号

    @Override
    public int compareTo(PhoneNumber o) {
        // 优先比较区号
        int areaCodeDiff = areaCode - o.areaCode;
        if (areaCodeDiff != 0) {
            return areaCodeDiff;
        }
        
        // 跟着比较前缀
        int prefixDiff = prefix - o.prefix;
        if (prefixDiff != 0) {
            return prefixDiff;
        }
        
        // 最低优先级比较市号
        return lineNumber - o.lineNumber;
    }

}
分享到:
评论

相关推荐

    java,Comparable接口实例

    1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort ...

    java 实现Comparable接口排序,升序、降序、倒叙

    主要介绍了java 实现Comparable接口排序,升序、降序、倒叙,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Comparable接口实现字符串比较大小排序的简单实例

    java通过Comparable接口实现字符串比较大小排序的简单实例

    Comparable接口和Comparator使用示例

    通过简单的例子初步了解Comparable和Comparator的使用,注释很详细

    java中实现Comparable接口实现自定义排序的示例

    下面小编就为大家带来一篇java中实现Comparable接口实现自定义排序的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip

    【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip

    java中Comparable和Comparator的区别

    文章目录简介ComparableComparator举个例子 java中Comparable和Comparator的区别 ...实际上Comparable接口只定义了一个方法: public int compareTo(T o); 实现这个接口的类都需要实现compareTo方法,表示两个

    Comparable接口和Comparator接口的比较

    实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。 此 接口只有一个方法...

    java实现别踩白块儿源码-SortedList:用Java编写的SortedList的实现。可以与实现Comparable接口的对象一起使用

    当且仅当要使用的对象实现Comparable接口时,我们也可以创建不带Comparator对象的SortedList。 用法 我们将像创建Java中的任何ArrayList一样创建SortedList: SortedList sortedlist = new SortedList(comparator); ...

    Java基础知识点 - 内容比较全面

    1.10 Java中Comparable和Comparator实现对象比较 1.11 Java中的JNDI (Java命名与目录接口) 1.12 Java事件处理机制与“恋爱关系” 1.13 Java代码优化编程 1.14 Java数组浅析 。。。。。。

    深入理解Java之接口

    若我们想调用Arrays.sort方法对一个People对象数组进行比较,那么People对象必须是”可比较的”,即People类需要实现Comparable接口。接口的实现类需要实现接口中定义的方法。也是说,接口描述了一组需求,而实现一...

    java上机考题总结

    北京市自学考试java上机实践考题总结,包含了常考的各种题型

    java集合类演示源码

    实现Comparable接口或Comparator接口,用户可以根据需要对集合中的元素进行排序。为了方便用户使用,Java平台还提供了Collections和Arrays工具类。collection.rar分别对上述内容进行详细讲解演示。

    Java开发详解.zip

    031113_【第11章:Java常用类库】_比较器(Comparable、Comparator)笔记.pdf 031114_【第11章:Java常用类库】_观察者设计模式笔记.pdf 031115_【第11章:Java常用类库】_正则表达式笔记.pdf 031116_【第11章:Java...

    ComparaTest.rar

    用Java的Comparable接口与Comparator接口分别实现类的比较排序~~

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    #在千锋“逆战”学习第19天#接口、内部类 、排序(java.lang.Comparable)完成Student排序

    接口回调 用哥德巴赫猜想来总结,哥德巴赫猜想就是要去输入一个偶数,输出这个偶数能被分解为哪两个质数的和,具体实现...接口起到了两个作用,一是隔离,使用者和实现者中间有了接口来作为隔离,不必串行完成,可以并

    java Lucene 中自定义排序的实现

    在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在了解具体实现方法之前先来看看这两个接口的定义吧. SortComparatorSource接口的功能是返回一个...

    实验5 Java Io 与容器实验指导书

    编写一个Java项目,包含两个类StudentJavaScore和...StudentJavaScore用于存储学生姓名和Java成绩,并实现了Comparable接口.ScoreOperation类包含5个方法,对学生成绩进行查询、排序,并实现字符串中字符计数操作。

    JAVA基础课程讲义

    Comparable接口 141 equals和hashcode方法 143  泛型 144 思考作业 145 上机作业 145 第八章 IO技术 146 为什么需要学习IO技术 146 基本概念 146 数据源 146 流的概念 146 第一个简单的IO流程序及深入(将文件中的...

Global site tag (gtag.js) - Google Analytics