比较接口:Comparable和Comparator
Comparable和Comparator是两个用于定义对象之间比较规则的接口。
一、public interface Comparator<T>
Comparator接口中有两个方法(不止两个):
1、int compare(Object obj1,Object obj2)
obj1>obj2,返回正值;
obj1=obj2,返回0;
obj1<obj2,返回负值。
通过重写compare()方法,可以改变对象排序的方式。
2、boolean equals(Object obj)
拿obj和调用该方法的对象按规则比较,相同返回true,不同返回false。
二、public interface Comparable<T>
其中只有一个方法:int compareTo(T o)
当需要让集合对其中的对象进行排序时,可以让对象实现(也必须实现)Comparable接口,这意味着通过compareTo()定义比较规则。
三、比较
Comparable接口是一种侵入式的设计,即他必须让被排序的类中实现compareTo()方法。如果一个类是第三方提供的,此时是无法通过Comparable接口进行对象排序操作的。
为了解决这一问题,必须使用比较器Comparator。
集合类可以通过比较器来精确定义按照何种规则排序,Comparator可以让代码不入侵类的内部定义排序规则。
显然,比较器Comparator比Comparable接口更加灵活,不入侵类,更符合单一职责的设计哲学。
当有了新的比较方式,只需要修改比较规则类,即实现Comparator接口的类。
比较接口:Comparable和Comparator的更多相关文章
- java 中的2个接口 Comparable和Comparator
像Integer.String这些类型的数据都是已经实现Comparable接口的,所以对这些类型可以直接通过Arrays.sort(...)和Collections.sort(...)方法进行排序. ...
- Java中Comparable与Comparator的区别
相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...
- Comparable与Comparator,java中的排序与比较
1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如s ...
- 对象大小对比之Comparable与Comparator
一 概述 1.Comparable与Comparator使用背景 数值型数据(byte int short long float double)天生可对比大小,可排序,String实现了Compara ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程
参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...
- JDK设计模式之——策略模式(Comparable和Comparator接口)
策略模式:其实就是java的多态...父类引用指向子类对象. 使用策略模式,改善排序算法上文中需要排序的是一个数组 让他可以对任何类型的数组进行排序 1.利用 接口 Comparable<T&g ...
- Comparable和Comparator接口是干什么的?列出它们的区别。
Comparable和Comparator接口是干什么的?列出它们的区别. Java提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它返回 ...
- 比较接口(Comparable ,Comparator)及流的聚合操作
Comparable 及 Comparator 的区别 Comparable 一个内比较器,类可以和自己比较 compareTo() 自然比较方法 public interface Comparabl ...
随机推荐
- Java String字符串的不可变
Java 通过把String类设计为final使类不可继承,将变量value设置为private并且是final的,且value没有setter方法,不可修改. 为什么这么设计: 1.字符串常量池的需 ...
- CentOS7 开机启动脚本与命令后台运行
一.& 在 Linux 命令后加上 & 可以在后台运行 二.nohup 对 SIGHUP 信号免疫,对 SIGINT 信号不免疫,可用 shopt | grep hup 查看. 当关 ...
- 一、基础篇--1.2Java集合-HashMap和ConcurrentHashMap的区别【转】
http://www.importnew.com/28263.html 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了多少时间的,不 ...
- ccf 201512-3 画图(90)
ccf 201512-3 画图(90) #include<iostream> #include<cstring> #include<algorithm> using ...
- python 构建自己的log系统
python的logging模块提供了记录程序运行情况的日志功能,类似于Apache的log4j,很好很强大,这里我们就来看一下Python中内置的日志模块logging用法详解 logging模块简 ...
- Android OkHttp3简介和使用详解
一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...
- Oracle 变量 之 define variable declare 用法及区别
Oracle 变量 之 define variable declare 用法及区别 Table of Contents 1. 扯蛋 2. define和accept 3. variable 3.1. ...
- Linux之tar命令
命令格式: tar [-cxzjvf] 压缩打包文档的名称 欲打包目录 参数: -c :建立一个归档文件的参数指令 -x :解开一个归档文件的参数指令! -z :是否需要用 gzip 压缩? -j ...
- 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_1 搭建环境
创建项目 使用骨架,创建webapp 为了创建项目更快速maven设置 archetypeCatalog internal 修改编译的版本 从昨天的课程内复制 相关的坐标.上面是版本锁定. 复制前端的 ...
- 利用python列出当前目录下的所有文件
问题 当一个目录下有很多文件夹或者文件,我们想分析各个文件的名字,这时就可以写一个函数,列出当前目录下所有文件名字. 代码 src_dir = r'./' # 源文件目录地址 def list_all ...