Comparable和Comparator 是什么以及区别
一、Comparable和Comparator
Comparable可以认为是一个内比较器,实现了Comparable接口的类,类的实例与实例直接可以比较,依赖compareTo方法的实现,compareTo方法的返回值就是比较的结果,是int。
比如:new Integer(1).compareTo(newInteger(2)) 返回值为-1.
方法参数2比调用者大的则返回-1. 小的为1,等于为0
可以想作两者做减法,1-2小于0为-1
Comparator可以认为是是一个外比较器,可以去实现Comparator接口得到一个自定义比较器。有两种情况可以使用实现Comparator接口的方式:
1、一个对象不支持自己和自己比较(不想实现Comparable接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
Comparator接口里面有一个compare方法,方法有两个参数To1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值也是比较结果和Comparable接口一样是int,有三种情况:
1、o1大于o2,返回正整数
2、o1等于o2,返回0
3、o1小于o3,返回负整数
其实两者区别看看他俩的方法就懂了,Comparable的类是拿自身和同一个类的比较,只接受一个参数(与同类比较)。而Comparator接收两个参数,可以拿不同类比较。一个是自身有这功能,一个是纯工具。
Comparable和Comparator 是什么以及区别的更多相关文章
- 来吧,一文彻底搞懂Java中的Comparable和Comparator
大家好,我是沉默王二,今天在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...
- 夯实Java基础(十五)——Java中Comparable和Comparator
1.前言 对于Java中的对象,我们只能使用基本运算符==.!=来判断一下地址是否相等,不能使用>.<来比较大小.但是在实际的开发中,我们需要对对象进行排序,也就是比较大小,那么应该如何实 ...
- Java中Comparable与Comparator的区别
相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- Java中Comparable和Comparator区别小结
一.Comparable简介 Comparable是排序接口.若一个类实现了Comparable接口,就意味着该类支持排序.实现了Comparable接口的类的对象的列表或数组可以通过Collecti ...
- Comparable和Comparator接口是干什么的?列出它们的区别。
Comparable和Comparator接口是干什么的?列出它们的区别. Java提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它返回 ...
- Comparable和Comparator的区别&Collections.sort的两种用法
在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...
- 浅谈Comparable与Comparator的区别
平时进行自定义排序一直使用实现Comparable接口,一段时间后操作的时候居然发现有了个Comparator接口 上网差了些资料,总结笔记一下. 基本原理就是比较,底层是二叉树 比如是3,6,5,1 ...
- PAT——1055. 集体照 (比较comparable和comparator的区别)
拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中间位置为m ...
随机推荐
- 中文保存在properties乱码的解决
方法:将中文转换为Native/ASCII编码:(比较好的一种解决方法,也必须设置好properties的字符编码(utf-8):已经试验成功) 网站:http://tool.oschina.net/ ...
- Jmeter安装图文及入门教程
一.JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.它可以用于测试静态和动态资源,例如 ...
- 使用python合并excel
当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法 ...
- 一步步到IOC
一段代码 class Program { static void Main(string[] args) { var shop=new Shop(); shop.Add(); shop.Delete( ...
- git分支操作笔记
git常用的基本操作 远程仓库只有一个master分支,创建dev分支并上传 # 创建本地dev分支 git checkout -b dev master # 推送dev分支到远程仓库 git pus ...
- MYSQL增删改查添加外键
给商品表(从表)添加一个外键 ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid 从 ...
- Python学习-while循环&逻辑运算符
一.while循环,continue.break语句在while循环中的使用 1.while循环语句: while 条件: 代码块 执行过程:判断条件是否为真,如果为真,执行代码块,继续下次循 ...
- 由"跨域"引出的一个终极思想(jsonp)
1.什么是跨域? 当协议.子域名.主域名.端口号中任意一个不相同时,都算作不同域. 跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,但是因为浏览器存在一个"同源策略&q ...
- RecyclerView实现Gallery画廊效果
使用RecyclerView实现一个画廊效果,主要是使用support库中最新加入的PagerSnapHelper类,通过计算滑动偏移来计算scale的值. 基本实现 首先需要为RecyclerVie ...
- SpringBoot数据聚合(spring-boot-data-aggregator-starter)
背景 接口开发是后端开发中最常见的场景, 可能是RESTFul接口, 也可能是RPC接口. 接口开发往往是从各处捞出数据, 然后组装成结果, 特别是那些偏业务的接口. 例如, 我现在需要实现一个接口, ...