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); }

Java容器解析系列(8) Comparable Comparator的更多相关文章

  1. Java容器解析系列(0) 开篇

    最近刚好学习完成数据结构与算法相关内容: Data-Structures-and-Algorithm-Analysis 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻, ...

  2. Java容器解析系列(11) HashMap 详解

    本篇我们来介绍一个最常用的Map结构--HashMap 关于HashMap,关于其基本原理,网上对其进行讲解的博客非常多,且很多都写的比较好,所以.... 这里直接贴上地址: 关于hash算法: Ha ...

  3. Java容器解析系列(9) PrioriyQueue详解

    PriorityQueue:优先级队列; 在介绍该类之前,我们需要先了解一种数据结构--堆,在有些书上也直接称之为优先队列: 堆(Heap)是是具有下列性质的完全二叉树:每个结点的值都 >= 其 ...

  4. Java容器解析系列(1) 迭代的进化——从Enumeration到Iterator

    在Java中,对于所有的Collection,都有一个特性,可以通过迭代器来遍历和删除其中的元素,因为Collection接口继承自Iterable接口. public interface Colle ...

  5. Java容器解析系列(6) Queue Deque AbstractQueue 详解

    首先我们来看一下Queue接口: /** * @since 1.5 */ public interface Queue<E> extends Collection<E> { / ...

  6. Java容器解析系列(13) WeakHashMap详解

    关于WeakHashMap其实没有太多可说的,其与HashMap大致相同,区别就在于: 对每个key的引用方式为弱引用; 关于java4种引用方式,参考java Reference 网上很多说 弱引用 ...

  7. Java容器解析系列(10) Map AbstractMap 详解

    前面介绍了List和Queue相关源码,这篇开始,我们先来学习一种java集合中的除Collection外的另一个分支------Map,这一分支的类图结构如下: 这里为什么不先介绍Set相关:因为很 ...

  8. Java容器解析系列(7) ArrayDeque 详解

    ArrayDeque,从名字上就可以看出来,其是通过数组实现的双端队列,我们先来看其源码: /** 有自动扩容机制; 不是线程安全的; 不允许添加null; 作为栈使用时比java.util.Stac ...

  9. Java容器解析系列(4) ArrayList Vector Stack 详解

    ArrayList 这里关于ArrayList本来都读了一遍源码,并且写了一些了,突然在原来的笔记里面发现了收藏的有相关博客,大致看了一下,这些就是我要写的(╹▽╹),而且估计我还写不到博主的水平,这 ...

随机推荐

  1. `vue-router`的`History`模式下的项目发布

    背景 脚手架版本号:vue cli 3.x 项目路由:vue-router的History模式 原理:url路由处理逻辑从后端转移到前端. 参考:https://developer.mozilla.o ...

  2. H5外包团队 MUI文档技术资料大全

    HTML5+ API缓存:http://www.dcloud.io/docs/api/zh_cn/cache.html h.js:http://www.hcoder.net/h vue.js:http ...

  3. 在docker中运行mariadb程序

    安装docker 获取mariadb镜像 docker pull mariadb 首先在https://hub.docker.com查找mariadb官方镜像,相关参数设置https://hub.do ...

  4. vue日历控件,自定义选择年月 选择年月日 选择年月日时 选择年月日时分,自定义日期范围

    下载地址:https://pan.baidu.com/s/1iEZl4kDkEg4ybwqc7aI7vQ 注:功能更加全面的日历控件请访问:https://www.cnblogs.com/mrzhu/ ...

  5. cowboy源码分析(二)

    接 cowboy源码分析(一) 下面我们重点看看cowboy_protocol.erl代码 -module(cowboy_protocol). %% API. -export([start_link/ ...

  6. windows编程命名规则

    转自:http://blog.sina.com.cn/s/blog_52cbfc3f0100fdy6.html 匈牙利命名法是一种编程时的命名规范.基本原则是:变量名=属性+类型+对象描述.其中每一对 ...

  7. mybatis逆向工程generatorConfiguration详细配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...

  8. 爬虫(五)requests模块2

    引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/ ...

  9. springboot整理

    lombok 添加maven依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId& ...

  10. dva.js 上手

    来源:https://pengtikui.cn/dva.js-get-started/ ——------------------------------------------------------ ...