Java容器解析系列(8) Comparable Comparator
Comparable和Comparator接口是两个用于对对象进行大小比较的接口,在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的更多相关文章
- Java容器解析系列(0) 开篇
最近刚好学习完成数据结构与算法相关内容: Data-Structures-and-Algorithm-Analysis 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻, ...
- Java容器解析系列(11) HashMap 详解
本篇我们来介绍一个最常用的Map结构--HashMap 关于HashMap,关于其基本原理,网上对其进行讲解的博客非常多,且很多都写的比较好,所以.... 这里直接贴上地址: 关于hash算法: Ha ...
- Java容器解析系列(9) PrioriyQueue详解
PriorityQueue:优先级队列; 在介绍该类之前,我们需要先了解一种数据结构--堆,在有些书上也直接称之为优先队列: 堆(Heap)是是具有下列性质的完全二叉树:每个结点的值都 >= 其 ...
- Java容器解析系列(1) 迭代的进化——从Enumeration到Iterator
在Java中,对于所有的Collection,都有一个特性,可以通过迭代器来遍历和删除其中的元素,因为Collection接口继承自Iterable接口. public interface Colle ...
- Java容器解析系列(6) Queue Deque AbstractQueue 详解
首先我们来看一下Queue接口: /** * @since 1.5 */ public interface Queue<E> extends Collection<E> { / ...
- Java容器解析系列(13) WeakHashMap详解
关于WeakHashMap其实没有太多可说的,其与HashMap大致相同,区别就在于: 对每个key的引用方式为弱引用; 关于java4种引用方式,参考java Reference 网上很多说 弱引用 ...
- Java容器解析系列(10) Map AbstractMap 详解
前面介绍了List和Queue相关源码,这篇开始,我们先来学习一种java集合中的除Collection外的另一个分支------Map,这一分支的类图结构如下: 这里为什么不先介绍Set相关:因为很 ...
- Java容器解析系列(7) ArrayDeque 详解
ArrayDeque,从名字上就可以看出来,其是通过数组实现的双端队列,我们先来看其源码: /** 有自动扩容机制; 不是线程安全的; 不允许添加null; 作为栈使用时比java.util.Stac ...
- Java容器解析系列(4) ArrayList Vector Stack 详解
ArrayList 这里关于ArrayList本来都读了一遍源码,并且写了一些了,突然在原来的笔记里面发现了收藏的有相关博客,大致看了一下,这些就是我要写的(╹▽╹),而且估计我还写不到博主的水平,这 ...
随机推荐
- CentOS7攻克日记(二) —— 配置初始化及网络配置
reboot之后到达这个页面,点击第一个进去同意一下协议之后Done,然后点击右下角的FINISH
- 记 Arduino 之 Hello World 篇(Getting Started)
本文仅为入门实验,甚至谈不上研究的程度.目的是:记录如何烧录程序到 Arduino 主板,以及通过一些简单例程,找到 Arduino 开发的感觉. 开发环境:Ardunio IDE(用于编译.上传运行 ...
- gcc 无法编译c17程序解决办法
1.保证将gcc程序升级到7.1以上. 2.如果用命令行手工编译,就多加个参数-std=c++17,例如命令应该是: "g++" -std=c++17 "text.cp ...
- js 整理
类型 1.js 中的数据类型,解释清楚原始数据类型和引用数据类型 js中共有null, underfined, string, number, boolean, object 六种数据类型 原始数据类 ...
- 日常安装chocolatey报错此系统上禁止运行脚本
查看计算机上的现用执行策略get-executionpolicy ( 默认:Restricted ) 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,使用以下命令将计算机上的 执行 ...
- .NET常用功能
1.判断对象判不为null或不为""或不为"undefined" public static bool isNotNullOrBlank(Object obj) ...
- 杂记-python
1.在cmd输入python -V显示当前python的版本信息,一定是大写的V 2.输入python,进入python解释器里面 3.在解释器中,输入exit()或者quit()会退出,一定要加括号 ...
- HOMER | MEME | 转录因子的靶基因预测
Finding Enriched Motifs in Genomic Regions (findMotifsGenome.pl) 在指定区域做motif enrichment,大大降低了假阳性. ME ...
- selenium、UA池、ip池、scrapy-redis的综合应用案例
案例: 网易新闻的爬取: https://news.163.com/ 爬取的内容为一下4大板块中的新闻内容 爬取: 特点: 动态加载数据 ,用 selenium 爬虫 1. 创建项目 scrapy ...
- oracle创建删除表空间
create [undo|temporary] tablespace orcp datafile|tempfile 'E:\orcle\oracleBaseDir\oradata\orcp\orcp. ...