刚学比较器的时候,一直不明白这两者的区别,也没有好好去琢磨过

准备考OCJP看到TreeSet时,上网查了下,也认真看了下API

总结出来一句:

Comparable: 是用来定义一种类型的自然排序法则的,是静态的

Comparator: 可以动态的改变排序的规则,是对comparable的一种补充 

  1. import java.util.Comparator;
  2. import java.util.TreeSet;
  3. import java.util.Iterator;
  4. import com.wujing.ocjp.Test_004.Student;
  5. public class Test_004_2 {
  6. public static void main(String[] args) {
  7. Test_004_2 ts = new Test_004_2();
  8. TreeSet hs = new TreeSet();
  9. //      TreeSet hs = new TreeSet(new StudentComparator());
  10. hs.add(ts.new Student(1,"zhangsan"));
  11. hs.add(ts.new Student(2,"lishi"));
  12. hs.add(ts.new Student(3,"wangwu"));
  13. hs.add(ts.new Student(1,"zhangsan"));
  14. hs.add(ts.new Student(1,"maliu"));
  15. for(Iterator ite = hs.iterator();ite.hasNext();) {
  16. System.out.println(ite.next());
  17. }
  18. }
  19. /**
  20. * Comparable: 重写compareTo(),是改变类的自然排序的规则,当用sort方法对其进行排序时,会自动遵守这个规则
  21. * Comparator: 重写compare(),是对某个对象collection进行强制整体排序,需要将comparator传递给sort方法
  22. * @author Administrator
  23. *
  24. */
  25. class Student implements Comparable {
  26. private int num;
  27. private String name;
  28. Student(int num, String name) {
  29. this.num = num;
  30. this.name = name;
  31. }
  32. public int getNum() {
  33. return num;
  34. }
  35. public void setNum(int num) {
  36. this.num = num;
  37. }
  38. public String getName() {
  39. return name;
  40. }
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44. public String toString() {
  45. return this.num + ":" + this.name;
  46. }
  47. public int hashCode() {
  48. return this.num*this.name.hashCode();
  49. }
  50. public boolean equals(Object o) {
  51. Student s = (Student)o;
  52. return this.num == s.num && this.name.equals(s.name);
  53. }
  54. @Override
  55. public int compareTo(Object o) {
  56. Student s = (Student)o;
  57. if(this.num == s.num) {
  58. return this.name.compareTo(s.name);
  59. }
  60. return (this.num - s.num);
  61. }
  62. }
  63. /**
  64. * Comparator: 可以动态的改变排序的规则,是对comparable的一种补充
  65. * @author Administrator
  66. *
  67. */
  68. static class StudentComparator implements Comparator<Student> {
  69. @Override
  70. public int compare(Student o1, Student o2) {
  71. if(o1.num == o2.num) {
  72. return -o1.name.compareTo(o2.name);
  73. }
  74. return (o1.num - o2.num);
  75. }
  76. }
  77. }

转载于:https://blog.51cto.com/4855753/973448

Comparable与Comparator异同相关推荐

  1. Java 中 Comparable 和 Comparator 比较

    为什么80%的码农都做不了架构师?>>>    本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...

  2. Java 解惑:Comparable 和 Comparator 的区别

    读完本文你将了解到: Comparable 自然排序 Comparator 定制排序 总结 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢? ...

  3. 对象比较:Comparable 和 Comparator

    java中我们如何给对象排序?这就必须借助Comparator 或 Comparable.有了他们就意味着你可用实现对象之间的比较.也就可用做到排序了. Comparable Comparable 也 ...

  4. Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

    1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...

  5. java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序

    本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...

  6. Java中Comparable和Comparator区别小结

    阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Comparable简介 Comparable是排序接口.若 ...

  7. comparable和comparator比较

      今天在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Comparat ...

  8. Java中Comparable与Comparator的区别

    一.概述 Comparable和Comparator都是用来实现集合中元素的比较.排序的. Comparable是在集合内部定义的方法实现的排序,位于java.util下. Comparator是在集 ...

  9. Comparable与Comparator浅析

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

最新文章

  1. [探讨]一次性工具软件
  2. 倒车辅助Park Assist
  3. vue项目-点击添加或者修改按钮浏览器的屏幕变黑,再次点击屏幕之后浏览器恢复正常(火狐浏览器、ChromeCoreLauncher双核浏览器)
  4. Java 反射 (Class、ClassLoader、Constructor、Method、Field)
  5. Excel中插入VBA宏处理
  6. SAP UI5 应用开发教程之三十六 - 使用 Chrome 开发者工具 Elements 标签动态修改 CSS 类试读版
  7. Lesson 028 —— python 模块
  8. css 水平垂直居中那些事
  9. 【MATLAB】混合粒子群算法原理、代码及详解
  10. 多线程下的进程同步(线程同步问题总结篇)
  11. 55.模拟撕衣服游戏编辑图片
  12. python实现t分布
  13. 聚焦 ECharts
  14. hdoj3709(数位dp)
  15. 2021-05-11 MongoDB面试题 MongoDB是什么
  16. idea String报错问题
  17. 剪辑视频,教你简单操作添加视频背景图
  18. 推荐几款App跨平台开发工具
  19. 竞赛图强连通分量大小幂和计数 - 组合计数 - 多项式
  20. 【渝粤教育】国家开放大学2018年春季 0284-22T外国文学 参考试题

热门文章

  1. linux之mktemp命令
  2. gitlab 修改存储为mysql_gitlab仓库存储位置的修改方法
  3. Windwos Server 2008 R2 DHCP服务
  4. mORMot Js对象解析 Json 实例
  5. salesforce 零基础学习(十八)WorkFlow介绍及用法
  6. Android APK文件解析
  7. 数据库 设计中的英文术语
  8. weblogic .NoClassDefFoundError: Could not initialize class sun.awt.X11Graphi
  9. 数组排列组合算法汇总
  10. 使用 JAVA 中的动态代理实现数据库连接池