博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java面试题详解三:比较器
阅读量:6405 次
发布时间:2019-06-23

本文共 1974 字,大约阅读时间需要 6 分钟。

一,Comparable和Comparator

1.Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较。
Comparable接口中只有一个compareTo()方法,实现Comparable接口就意味着要实现该方法,该方法也就是实现定制化比较策略的地方

例如:

public class Domain implements Comparable
{ //Comparable接口后的
类是要与继承该接口的类比较 private String str; public Domain(String str) { this.str = str; } public int compareTo(Domain domain){ if (this.str.compareTo(domain.str) > 0) return 1; else if (this.str.compareTo(domain.str) == 0) return 0; else return -1; } public String getStr(){ return str; }}

前面说实现Comparable接口的类是可以支持和自己比较的,但是其实代码里面Comparable的泛型未必就一定要是Domain,将泛型指定为String或者指定为其他任何任何类型都可以----只要开发者指定了具体的比较算法就行

所以想使用Comparable接口进行比较时,需要:
(1).实现Comparable接口,并指定泛型里的要比较的类型
(2).重写compareTo方法
使用场景:如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。

2.Comparator可以认为是是一个外比较器,个人认为有两种情况可以使用实现Comparator接口的方式:

(1).一个对象不支持自己和自己比较(没有实现Comparable接口,在某些情况下,你可能不想或者不能去修改类的源代码。同时,你又希望可以基于对象的某些属性或字段去比较对象的大小,此时,我们就可以让该某类实现Comparator接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象

public class DomainComparator implements Comparator
{ public int compare(Domain domain1, Domain domain2) { if (domain1.getStr().compareTo(domain2.getStr()) > 0) return 1; else if (domain1.getStr().compareTo(domain2.getStr()) == 0) return 0; else return -1; }}
public static void main(String[] args){    Domain d1 = new Domain("c");    Domain d2 = new Domain("c");    Domain d3 = new Domain("b");    Domain d4 = new Domain("d");    DomainComparator dc = new DomainComparator();    System.out.println(dc.compare(d1, d2));    System.out.println(dc.compare(d1, d3));    System.out.println(dc.compare(d1, d4));}

 

转载于:https://www.cnblogs.com/inspred/p/9526299.html

你可能感兴趣的文章
25个必须记住的SSH命令[forward]
查看>>
move to www.csdn.net
查看>>
Asp.Net中级 - 1.虚拟路径 + 2.Request对象 + 3.Response对象 + 4.Server对象
查看>>
读《高性能建站指南》(上)
查看>>
VC ListCtrl中嵌入进度条
查看>>
Java中static、final用法小结
查看>>
设置Html.TextBoxFor的Value值 及 去除数字无效的零及小数点
查看>>
组件应用程序[置顶] 《Flex4 实战》读书笔记
查看>>
poj 3264 Balanced Lineup
查看>>
The Aggregate Magic Algorithms
查看>>
android 可展开(收缩)的列表ListView(ExpandableListView)
查看>>
工具设置Unity3D系列教程--使用免费工具在Unity3D中开发2D游戏 第一节
查看>>
输入文本框提示+验证文本框中要输入的内容
查看>>
条件枚举Counterfeit Dollar(poj1013暴力枚举)
查看>>
鼠标滑轮事件的差异onmousewheel和DOMMouseScroll
查看>>
如何设计一门语言(六)——exception和error code
查看>>
【Android API】Android 4.1 API官方文档详解
查看>>
HDOJ题目分类
查看>>
Login failed for user 'xxx'
查看>>
VMware vSphere 5.1 群集深入解析(一)
查看>>