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
  • 相关阅读:
    大数据Hadoop-2
    大数据Hadoop-1
    Consistent Hashing
    分支的创建、删除、切换、合并以及冲突解决
    windows WEB 高可用/可伸缩
    Oracle行转列、列转行的Sql语句总结
    从零到百亿互联网金融架构发展史---架构变迁
    WebJars
    springcloud(五):熔断监控Hystrix Dashboard和Turbine
    SpringBoot编写自定义的starter 专题
  • 原文地址:https://www.cnblogs.com/jamesvoid/p/9779156.html
Copyright © 2011-2022 走看看