think in java interview-高级开发人员面试宝典(三)
comparable接口与comparator
两种比较接口分析
前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。
一个类实现了 Camparable 接口表明这个类的对象之间是可以相互比较的。如果用数学语言描述的话就是这个类的对象组成的集合中存在一个全序。这样,这个类对象组成的集合就可以使用 Sort 方法排序了。
而 Comparator 的作用有两个:
1. 如果类的设计师没有考虑到 Compare 的问题而没有实现 Comparable 接口,可以通过 Comparator 来实现比较算法进行排序;
2. 为了使用不同的排序标准做准备,比如:升序、降序或其他什么序。
在 “集合框架” 中有两种比较接口: Comparable 接口和 Comparator 接口。
Comparable 是通用的接口,用户可以实现它来完成自己特定的比较,而 Comparator 可以看成一种算法的实现,在需要容器集合实现比较功能的时候,来指定这个比较器,这可以看成一种设计模式,将算法和数据分离。
来看样例:
PersonBean类
<span style="font-size:12px;">publicclass PersonBean implements Comparable<PersonBean> {
public PersonBean(int age, String name) {
this.age = age;
this.name = name;
}
int age = 0;
String name = "";
publicint getAge() {
return age;
}
publicvoid setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
publicboolean equals(Object o) {
if (!(o instanceof PersonBean)) {
returnfalse;
}
PersonBean p = (PersonBean) o;
return (age == p.age) && (name.equals(p.name));
}
publicint hashCode() {
int result = 17;
result = 31 * result + age;
result = 31 * result + name.hashCode();
return result;
}
public String toString() {
return (age + "{" + name + "}");
}
publicint compareTo(PersonBean person) {
int cop = age - person.getAge();
if (cop != 0)
return cop;
else
return name.compareTo(person.name);
}
}
</span>
AlphDesc类
<span style="font-size:12px;">import java.util.Comparator;
publicclass AlphDesc implements Comparator<PersonBean> {
publicint compare(PersonBean personA, PersonBean personB) {
int cop = personA.age - personB.age;
if (cop != 0)
return cop;
else
return personB.getName().compareTo(personA.getName());
}
}
</span>
TestComparable类
<span style="font-size:12px;">import java.util.*;
publicclass TestComparable {
/**
* @param args
*/
publicvoid compare() {
PersonBean[] p = { new PersonBean(20, "Tom"),
new PersonBean(20, "Jeff"),
new PersonBean(30, "Mary"),
new PersonBean(20, "Ada"),
new PersonBean(40, "Walton"),
new PersonBean(61, "Peter"),
new PersonBean(20, "Bush") };
System.out.println("before sort:\n" + Arrays.toString(p));
AlphDesc desc = new AlphDesc();
Arrays.sort(p,desc);
System.out.println("after sort:\n" + Arrays.toString(p));
}
publicstaticvoid main(String[] args) {
TestComparable tc = new TestComparable();
tc.compare();
}
}</span>
每一篇不宜写得过长,下篇继续
转载于:https://blog.51cto.com/longx/1351868
think in java interview-高级开发人员面试宝典(三)相关推荐
- think in java interview-高级开发人员面试宝典(二)
think in java interview-高级开发人员面试宝典(二) 分类: 面经2013-08-05 00:4318634人阅读评论(58)收藏举报 目录(?)[+] 从现在开始,以样题的方式 ...
- [置顶] think in java interview-高级开发人员面试宝典(二)
从现在开始,以样题的方式一一列出各种面试题以及点评,考虑到我在前文中说的,对于一些大型的外资型公司,你将会面临全程英语面试,因此我在文章中也会出现许多全英语样题. 这些题目来自于各个真实的公司,公司名 ...
- think in java interview-高级开发人员面试宝典(一)
"生死六重门" 无论你是在职,非在职,高级工程师,工程师,架构师,如果你正在面试阶段,请看完此文! 相信这篇文章对你的职业生涯和阶值观会造成重大的改变! 如果你是一名PM或者是管理 ...
- java安装_我最喜欢的Java高级开发人员书籍
java安装 我上一篇博客文章(我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的 "面向高级Java开发人员的十大网站"的启发. Wang ...
- Java高级开发工程师面试笔记
最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...
- 高级java开发_我最喜欢的Java高级开发人员书籍
高级java开发 我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的"面向高级Java开发人员的十大网站"的启发. Wa ...
- 我最喜欢的Java高级开发人员书籍
我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法是由Xiaoran Wang发表的针对高级Java开发人员的十大网站的启发. Wang还写了一篇名为<面向Java高级开 ...
- 近期Java高级开发岗面试总结
原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...
- 2020年 面向高级开发人员的 iOS面试问题
在本文中,您将找到针对高级开发人员的iOS面试问题和解答. 当您准备进行技术性的iOS面试时,重要的是要了解您可能会被问到的话题以及经验丰富的iOS开发人员的期望.这些问题被许多公司用来衡量iOS候选 ...
最新文章
- 2008秋季-计算机软件基础-有序表合并 教材 P79, ex3
- Android Realm相关操作
- 【渝粤教育】电大中专Windows操作系统作业 题库
- 交易机项目工作日志--2013-3-3
- 站在信息安全角度 人脸识别面临五大问题
- armbian ubuntu 桌面_Armbian国内源(Ubuntu18.04 Bionic)
- css字体倾斜角度_css如何实现渐变效果?css背景色渐变与文字渐变效果的实现(代码实例)...
- python百度贴吧怎么爬取最早的帖子_Python爬虫爬取百度贴吧的帖子
- 程序异常exitcode非0_ARM寄存器分析以及异常处理方法
- Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
- sas最新sid及安装方法
- POI数据获取-Python
- C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码
- 计算机类专业都有什么区别?
- js 根据身份证获取出生日期与年龄
- 按键精灵 打开windows系统应用
- java 文件保存_java中怎么实现保存文件到本地
- 蓝桥杯—交换瓶子—Java
- JpaRepository查询方法名规范
- 3.图解排序算法(三)之堆排序