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
  • 相关阅读:
    微信小程序wx.chooseImage和wx.previewImage的综合使用(图片上传不限制最多张数)
    js数组与字符串之间的相互转换
    微信小程序wx.previewImage实用案例(交流QQ群:604788754)
    PHP:第一章——PHP中的魔术常量
    小程序模板嵌套以及相关遍历数据绑定
    6 大主流 Web 框架优缺点对比:15篇前端热文回看
    通俗地讲,Netty 能做什么?
    Netty
    为什么选择Netty
    linux下gsoap的初次使用 -- c风格加法实例
  • 原文地址:https://www.cnblogs.com/jamesvoid/p/9779156.html
Copyright © 2011-2022 走看看