comparable接口与comparator

两种比较接口分析

前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。

一个类实现了 Camparable 接口表明这个类的对象之间是可以相互比较的。如果用数学语言描述的话就是这个类的对象组成的集合中存在一个全序。这样,这个类对象组成的集合就可以使用 Sort 方法排序了。

而 Comparator 的作用有两个:
1. 如果类的设计师没有考虑到 Compare 的问题而没有实现 Comparable 接口,可以通过 Comparator 来实现比较算法进行排序;
2. 为了使用不同的排序标准做准备,比如:升序、降序或其他什么序。

在 “集合框架” 中有两种比较接口: Comparable 接口和 Comparator 接口。

Comparable 是通用的接口,用户可以实现它来完成自己特定的比较,而 Comparator 可以看成一种算法的实现,在需要容器集合实现比较功能的时候,来指定这个比较器,这可以看成一种设计模式,将算法和数据分离。

来看样例:

PersonBean类

[java]view plaincopy
  1. <span style="font-size:12px;">publicclass PersonBean implements Comparable<PersonBean> {

  2. public PersonBean(int age, String name) {

  3. this.age = age;

  4. this.name = name;

  5. }

  6. int age = 0;

  7. String name = "";

  8. publicint getAge() {

  9. return age;

  10. }

  11. publicvoid setAge(int age) {

  12. this.age = age;

  13. }

  14. public String getName() {

  15. return name;

  16. }

  17. publicvoid setName(String name) {

  18. this.name = name;

  19. }

  20. publicboolean equals(Object o) {

  21. if (!(o instanceof PersonBean)) {

  22. returnfalse;

  23. }

  24. PersonBean p = (PersonBean) o;

  25. return (age == p.age) && (name.equals(p.name));

  26. }

  27. publicint hashCode() {

  28. int result = 17;

  29. result = 31 * result + age;

  30. result = 31 * result + name.hashCode();

  31. return result;

  32. }

  33. public String toString() {

  34. return (age + "{" + name + "}");

  35. }

  36. publicint compareTo(PersonBean person) {

  37. int cop = age - person.getAge();

  38. if (cop != 0)

  39. return cop;

  40. else

  41. return name.compareTo(person.name);

  42. }

  43. }

  44. </span>

AlphDesc类

[java]view plaincopy
  1. <span style="font-size:12px;">import java.util.Comparator;

  2. publicclass AlphDesc implements Comparator<PersonBean> {

  3. publicint compare(PersonBean personA, PersonBean personB) {

  4. int cop = personA.age - personB.age;

  5. if (cop != 0)

  6. return cop;

  7. else

  8. return personB.getName().compareTo(personA.getName());

  9. }

  10. }

  11. </span>

TestComparable类

[java]view plaincopy
  1. <span style="font-size:12px;">import java.util.*;

  2. publicclass TestComparable {

  3. /**

  4. * @param args

  5. */

  6. publicvoid compare() {

  7. PersonBean[] p = { new PersonBean(20, "Tom"),

  8. new PersonBean(20, "Jeff"),

  9. new PersonBean(30, "Mary"),

  10. new PersonBean(20, "Ada"),

  11. new PersonBean(40, "Walton"),

  12. new PersonBean(61, "Peter"),

  13. new PersonBean(20, "Bush") };

  14. System.out.println("before sort:\n" + Arrays.toString(p));

  15. AlphDesc desc = new AlphDesc();

  16. Arrays.sort(p,desc);

  17. System.out.println("after sort:\n" + Arrays.toString(p));

  18. }

  19. publicstaticvoid main(String[] args) {

  20. TestComparable tc = new TestComparable();

  21. tc.compare();

  22. }

  23. }</span>

每一篇不宜写得过长,下篇继续

转载于:https://blog.51cto.com/longx/1351868

think in java interview-高级开发人员面试宝典(三)相关推荐

  1. think in java interview-高级开发人员面试宝典(二)

    think in java interview-高级开发人员面试宝典(二) 分类: 面经2013-08-05 00:4318634人阅读评论(58)收藏举报 目录(?)[+] 从现在开始,以样题的方式 ...

  2. [置顶] think in java interview-高级开发人员面试宝典(二)

    从现在开始,以样题的方式一一列出各种面试题以及点评,考虑到我在前文中说的,对于一些大型的外资型公司,你将会面临全程英语面试,因此我在文章中也会出现许多全英语样题. 这些题目来自于各个真实的公司,公司名 ...

  3. think in java interview-高级开发人员面试宝典(一)

    "生死六重门" 无论你是在职,非在职,高级工程师,工程师,架构师,如果你正在面试阶段,请看完此文! 相信这篇文章对你的职业生涯和阶值观会造成重大的改变! 如果你是一名PM或者是管理 ...

  4. java安装_我最喜欢的Java高级开发人员书籍

    java安装 我上一篇博客文章(我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的 "面向高级Java开发人员的十大网站"的启发. Wang ...

  5. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  6. 高级java开发_我最喜欢的Java高级开发人员书籍

    高级java开发 我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的"面向高级Java开发人员的十大网站"的启发. Wa ...

  7. 我最喜欢的Java高级开发人员书籍

    我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法是由Xiaoran Wang发表的针对高级Java开发人员的十大网站的启发. Wang还写了一篇名为<面向Java高级开 ...

  8. 近期Java高级开发岗面试总结

    原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...

  9. 2020年 面向高级开发人员的 iOS面试问题

    在本文中,您将找到针对高级开发人员的iOS面试问题和解答. 当您准备进行技术性的iOS面试时,重要的是要了解您可能会被问到的话题以及经验丰富的iOS开发人员的期望.这些问题被许多公司用来衡量iOS候选 ...

最新文章

  1. 2008秋季-计算机软件基础-有序表合并 教材 P79, ex3
  2. Android Realm相关操作
  3. 【渝粤教育】电大中专Windows操作系统作业 题库
  4. 交易机项目工作日志--2013-3-3
  5. 站在信息安全角度 人脸识别面临五大问题
  6. armbian ubuntu 桌面_Armbian国内源(Ubuntu18.04 Bionic)
  7. css字体倾斜角度_css如何实现渐变效果?css背景色渐变与文字渐变效果的实现(代码实例)...
  8. python百度贴吧怎么爬取最早的帖子_Python爬虫爬取百度贴吧的帖子
  9. 程序异常exitcode非0_ARM寄存器分析以及异常处理方法
  10. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  11. sas最新sid及安装方法
  12. POI数据获取-Python
  13. C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码
  14. 计算机类专业都有什么区别?
  15. js 根据身份证获取出生日期与年龄
  16. 按键精灵 打开windows系统应用
  17. java 文件保存_java中怎么实现保存文件到本地
  18. 蓝桥杯—交换瓶子—Java
  19. JpaRepository查询方法名规范
  20. 3.图解排序算法(三)之堆排序

热门文章

  1. 如何修复重编译Datapump工具expdp/impdp
  2. Notepad++使用技法
  3. Centos7_ELK5.4.1配置部署
  4. laravel 模版引擎使用
  5. solr/solrj原子更新
  6. 09.20类类型random
  7. 通过ajax调用WebService服务
  8. 把一个人的特点写具体作文_把一个人的特点写具体500字作文
  9. MODE —— 计算10个分数的平均值(知识点: 数组 变长数组)
  10. CTF-练习平台-WEB之 签到题