zoukankan      html  css  js  c++  java
  • Java容器解析系列(8) Comparable Comparator

    ComparableComparator接口是两个用于对对象进行大小比较的接口,在java集合相关类中,也被经常地使用到.
    关于其使用,可以参考网络上的其他博客(没什么好说的);这里阐述关于这两个接口的区别,直接看源码即可:

    package java.lang;
    // 在java.lang包下
    /**
     * 该接口的实现类:
     * 1. 本身具有排序的能力,我们称之为该类的自然排序,其compareTo()方法就称为该类的自然排序方法;
     * 2. 数组或List,可以使用Collections.sort(List)或 Arrays.sort(Object[])方法进行排序;
     * 3. 可以直接作为SortedMap/SortedSet的key,而不需要指定Comparator
     * 4. 几乎所有的Java核心库类都实现了Comparable接口,并且与equals()方法保持一致.但是java.math.BigDecimal除外,它的自然排序将值相等但精确度不同的 BigDecimal 对象(比如 4.0 和 4.00)视为相等。
     * @since 1.2
     */
    public interface Comparable<T> {
        /*
        与指定对象o进行比较;
        如果o为null,抛出NullPointerException;
        返回值:
            比o小,返回负数;
            和o相等,返回0;
            比o大,返回正数;
    
        实现类必须保证: 
        1. x.compareTo(y) = -y.compareTo(x),而且如果x.compareTo(y)抛出异常,那么y.compareTo(x)也必须抛出异常;
        2. 比较关系是有传递性的:如果x.compareTo(y) < 0,y.compareTo(z) < 0,可以推导出x.compareTo(z) < 0
        强烈推荐该方法实现和equals()保持一致,如果x.compareTo(y)=0,则x.equals(y)
        */
        public int compareTo(T o);
    }
    
    package java.util;
    // 在java.util包下
    /**
     * Comparator接口表示一个比较器;
     * 该接口的实现类:
     * 1. 被传入排序方法Collections.sort(List,Comparator)或 Arrays.sort(Object[],Comparator)进行排序,指定排序方式;
     * 2. 被传入SortedMap/SortedSet,提供key的排序方式;
     * 3. 与Comparable不同,Comparator实现类可能允许与null比较;
     * @since 1.2
     */
    public interface Comparator<T> {
    
        // 同Comparable.compareTo()
        // 只不过这里是指定了两个对象而已,而Comparable对象自身就是被比较对象,相当于这里的o1
        int compare(T o1, T o2);
    
        // 比较是否是同一个Comparator
        boolean equals(Object obj);
    
    }
    
    Let's go change the world,or changed by the world
  • 相关阅读:
    java 泛型 -- 泛型类,泛型接口,泛型方法
    android:id="@id/resid" , andorid:id="@+id/resid" 的区别
    Ubuntu16.04 + Win 10 双系统 时间同步,启动项顺序,NumLock指示灯常亮
    Linux 下 Console / 控制台 复制粘贴快捷键
    Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..
    JQuery的Ajax跨域请求的
    1031. Hello World for U (20)
    项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
    Tomcatserverhttps协议配置简单介绍
    Unity3D
  • 原文地址:https://www.cnblogs.com/jamesvoid/p/9779156.html
Copyright © 2011-2022 走看看