Java--对象的比较2(类比)
小结
- 1.为什么需要Comparator接口和Comparable接口?
- 2.感觉有Comparable就够了,为什么要有Comparator?
- 3.equals VS Comparable.compareTo VS Comparator.compare
- 4.和 java 集合框架的配合
1.为什么需要Comparator接口和Comparable接口?
答:因为对象无法带有顺序,引用类型无法使用大于、小于。
解决:1)自然顺序–定义类实现Comparable接口
2)非自然顺序–定义比较器(实现Comparator接口)
Person p = new Person(……);Person q = new Person(……);//自然顺序p.comparaTo(q); //非自然顺序Comparator<Person> cmp = new ……;cmp.compare(p,q);
2.感觉有Comparable就够了,为什么要有Comparator?
答:1.有些类天生没有自然顺序或者自然顺序不满足当前我们的需要,所以需要引入比较器来比较。
2.Comparable 使用的时候,必需要修改比较类(使类继承Comparable接口);Comparator 不需要修改类,只需要新定义比较类即可。
3.Comparable 只能定义一种比较规则;Comparator 可以定义多种比较规则(定义多个比较类)。
3.equals VS Comparable.compareTo VS Comparator.compare
覆写的方法 | 说明 |
---|---|
Object.equals | 因为所有的类都是继承自Object的,所以直接覆写即可,不过只能比较是否相等 |
Comparable.compareTo | 需要手动实现接口,侵入性比较强,但一旦实现,每次用该类都有顺序,属于内部顺序 |
Comparator.compare | 需要实现一个比较器对象,对待比较类的侵入性弱,但对算法代码实现侵入性强 |
4.和 java 集合框架的配合
- 使用 contains 类似的方法,内部基本在调用元素的 equals 方法,所以要求元素覆写过 equals 方法
- 使用 HashMap,key 的比较内部会调用 equals 方法,所以要求元素覆写过 equals 方法
- 使用排序相关方法,内部需要进行比较,所以或者选择实现 Comparable 或者传入一个 Comparator
- 使用 TreeMap,key 需要进行大小比较,所以或者选择实现 Comparable 或者传入一个 Comparator
- ……
Java--对象的比较2(类比)相关推荐
- 《深入理解java虚拟机》笔记1——Java内存区域与Java对象
运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...
- 深入理解JVM(1)——Java内存区域与Java对象
最近放暑假在家,没有实验室的工作要做,正好趁这个时间恶补了之前一知半解的JVM知识,使用的主要学习资料是周志明大大的<深入理解Java虚拟机--JVM高级特性与最佳实践>,我仔细拜读了两遍 ...
- Java对象的生命周期与垃圾回收以及四种引用
转载请注明出处: Java对象的生命周期 与 垃圾回收 - ITeye博客 - 老Man 创建对象的方式 用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.re ...
- 1.Java内存区域与Java对象
运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...
- java对象什么时候回收_Java对象的生命周期与垃圾回收以及四种引用
创建对象的方式用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法. 调用对象的clon ...
- java 对象内存布局_Java--对象内存布局
在HotSpot虚拟机中,对象在内存中的存储布局可以分为3块区域:对象头部.实例数据.对齐填充. 一.对象头部Header的布局 Mark Word Class 指针 在32位系统下,上面两部分各占4 ...
- java对象转xml 高性能_通过实例学习JAVA对象转成XML输出
一.总体说明 XML和JSON 是最为常用的数据交换格式 本例子演示如何将java对象,转成XML输出. 二.流程 1.在上文的例子中,创建一个包"com.waylau.rest.bean& ...
- Java 对象的生命周期
Java对象的生命周期 在Java中,对象的生命周期包括以下几个阶段: 创建阶段(Created) 应用阶段(In Use) 不可见阶段(Invisible) 不可达阶段(Unreachable) 收 ...
- 理解Java对象:要从内存布局及底层机制说起,话说....
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 大家好,又见面了,今天是JVM专题的第二篇文章,在上 ...
- 一个Java对象到底有多大?
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 出处:http://u6.gg/swLPg 编写Java代码的时候,大多数情况下,我们很少关注一 ...
最新文章
- php方行图片裁剪为圆形,如何将图片裁成圆形、矩形……各种形状?
- 科大讯飞CV赛baseline:图像分类实践+0.55
- (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
- 群晖 emby_NAS上安装emby,打造家庭媒体中心
- iOS常见问题(5)
- Git ----fatal: unable to access ‘https://gitee.com/***.git/‘: SSL certificate problem: unable
- python的pyqt5_Pycharm+Python+PyQt5使用详解
- 开源创新的理念_开源如何解决创新问题
- java 创建存储过程_如何在pl/sql中创建及调用JAVA存储过程 | 学步园
- [Linux] 内核模块proc使用 实例:统计所有进程的信息
- Weave 网络结构分析 - 每天5分钟玩转 Docker 容器技术(64)
- webrtc研究资源摘录
- 自适应算法和学习算法的区别
- 微信朋友圈 腾讯服务器,朋友圈@微信能得一面红旗?腾讯服务器一度宕机
- 23种设计模式python版
- 【FFmpeg编程进阶】(13)FLV 解码器初始化函数 ff_h263_decode_init() 代码分析 --- 待更新
- 使用Java调用shell脚本时遇到的问题
- 聚合物-化学键-聚合物PEG-Hyd-PDLLA /PLA-PHis-hyd-PEG/PEG-PUSeSe-PEG
- 西南大学计算机2019专业英语秋季答案,西南大学2019年秋《大学英语B》作业资料参考答案...
- 微信小程序输入联想、表格
热门文章
- 小小拷贝-strcpy洒洒水啦
- SQL优化 —— in与not in
- 计算机网络背诵笔记,震惊!网络搜索、数字笔记和云盘,让你变笨!!!
- anemometer mysql 500_Anemometer基于pt-query-digest将MySQL慢查询可视化
- 全国计算机技术与软件专业技术考试----(中级资格/工程师)各资格证详细介绍
- 用Python让你完成一次绝美樱花视觉体验瞬间陷入二次元~
- NIPS最佳,惊人的天赋与无人察觉的缺陷并存,GPT-3的未来有多少种可能......
- 7 series FPGAs Transceiver Wizard IP核使用和测试
- html成绩百分制转换为,设计一个程序,将从键盘上输入的百分制成绩转换成对应的五分制成绩并输出。90分以上为A,80~90分为B,...
- [Transformer]A Survey on Vision Transformer