Comparable与Comparator异同
刚学比较器的时候,一直不明白这两者的区别,也没有好好去琢磨过
准备考OCJP看到TreeSet时,上网查了下,也认真看了下API
总结出来一句:
Comparable: 是用来定义一种类型的自然排序法则的,是静态的
Comparator: 可以动态的改变排序的规则,是对comparable的一种补充
- import java.util.Comparator;
- import java.util.TreeSet;
- import java.util.Iterator;
- import com.wujing.ocjp.Test_004.Student;
- public class Test_004_2 {
- public static void main(String[] args) {
- Test_004_2 ts = new Test_004_2();
- TreeSet hs = new TreeSet();
- // TreeSet hs = new TreeSet(new StudentComparator());
- hs.add(ts.new Student(1,"zhangsan"));
- hs.add(ts.new Student(2,"lishi"));
- hs.add(ts.new Student(3,"wangwu"));
- hs.add(ts.new Student(1,"zhangsan"));
- hs.add(ts.new Student(1,"maliu"));
- for(Iterator ite = hs.iterator();ite.hasNext();) {
- System.out.println(ite.next());
- }
- }
- /**
- * Comparable: 重写compareTo(),是改变类的自然排序的规则,当用sort方法对其进行排序时,会自动遵守这个规则
- * Comparator: 重写compare(),是对某个对象collection进行强制整体排序,需要将comparator传递给sort方法
- * @author Administrator
- *
- */
- class Student implements Comparable {
- private int num;
- private String name;
- Student(int num, String name) {
- this.num = num;
- this.name = name;
- }
- public int getNum() {
- return num;
- }
- public void setNum(int num) {
- this.num = num;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String toString() {
- return this.num + ":" + this.name;
- }
- public int hashCode() {
- return this.num*this.name.hashCode();
- }
- public boolean equals(Object o) {
- Student s = (Student)o;
- return this.num == s.num && this.name.equals(s.name);
- }
- @Override
- public int compareTo(Object o) {
- Student s = (Student)o;
- if(this.num == s.num) {
- return this.name.compareTo(s.name);
- }
- return (this.num - s.num);
- }
- }
- /**
- * Comparator: 可以动态的改变排序的规则,是对comparable的一种补充
- * @author Administrator
- *
- */
- static class StudentComparator implements Comparator<Student> {
- @Override
- public int compare(Student o1, Student o2) {
- if(o1.num == o2.num) {
- return -o1.name.compareTo(o2.name);
- }
- return (o1.num - o2.num);
- }
- }
- }
转载于:https://blog.51cto.com/4855753/973448
Comparable与Comparator异同相关推荐
- Java 中 Comparable 和 Comparator 比较
为什么80%的码农都做不了架构师?>>> 本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...
- Java 解惑:Comparable 和 Comparator 的区别
读完本文你将了解到: Comparable 自然排序 Comparator 定制排序 总结 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢? ...
- 对象比较:Comparable 和 Comparator
java中我们如何给对象排序?这就必须借助Comparator 或 Comparable.有了他们就意味着你可用实现对象之间的比较.也就可用做到排序了. Comparable Comparable 也 ...
- Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)
1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...
- java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序
本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...
- Java中Comparable和Comparator区别小结
阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Comparable简介 Comparable是排序接口.若 ...
- comparable和comparator比较
今天在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Comparat ...
- Java中Comparable与Comparator的区别
一.概述 Comparable和Comparator都是用来实现集合中元素的比较.排序的. Comparable是在集合内部定义的方法实现的排序,位于java.util下. Comparator是在集 ...
- Comparable与Comparator浅析
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
最新文章
- [探讨]一次性工具软件
- 倒车辅助Park Assist
- vue项目-点击添加或者修改按钮浏览器的屏幕变黑,再次点击屏幕之后浏览器恢复正常(火狐浏览器、ChromeCoreLauncher双核浏览器)
- Java 反射 (Class、ClassLoader、Constructor、Method、Field)
- Excel中插入VBA宏处理
- SAP UI5 应用开发教程之三十六 - 使用 Chrome 开发者工具 Elements 标签动态修改 CSS 类试读版
- Lesson 028 —— python 模块
- css 水平垂直居中那些事
- 【MATLAB】混合粒子群算法原理、代码及详解
- 多线程下的进程同步(线程同步问题总结篇)
- 55.模拟撕衣服游戏编辑图片
- python实现t分布
- 聚焦 ECharts
- hdoj3709(数位dp)
- 2021-05-11 MongoDB面试题 MongoDB是什么
- idea String报错问题
- 剪辑视频,教你简单操作添加视频背景图
- 推荐几款App跨平台开发工具
- 竞赛图强连通分量大小幂和计数 - 组合计数 - 多项式
- 【渝粤教育】国家开放大学2018年春季 0284-22T外国文学 参考试题
热门文章
- linux之mktemp命令
- gitlab 修改存储为mysql_gitlab仓库存储位置的修改方法
- Windwos Server 2008 R2 DHCP服务
- mORMot Js对象解析 Json 实例
- salesforce 零基础学习(十八)WorkFlow介绍及用法
- Android APK文件解析
- 数据库 设计中的英文术语
- weblogic .NoClassDefFoundError: Could not initialize class sun.awt.X11Graphi
- 数组排列组合算法汇总
- 使用 JAVA 中的动态代理实现数据库连接池