使用Comparable和Comparator接口比较对象

来源:互联网 发布:网络语言 脚本是什么 编辑:程序博客网 时间:2024/05/20 20:02

其实对象比较的接口就这么两个, 了解清楚了什么时候该用哪个心里也就有了谱了,之前不太理解这两个,反正基本上没有将这

两个排序接口分别开,为了应付面试也就背了排序就用这两个接口就行了,至于具体的就没怎么了解过了,其实这是很不应该的

,为什么设计两个接口,自然是因为一个接口不能满足使用,废话说了这么多,接着就说说这两个接口的使用。


Comparable接口使用比较简单,直接使比较对象实现这个接口就行了,然后实现compareTo方法即可实现排序,其实这个接口应该满足

我们开发中的大部分场景。奋斗貌似也就这么一种用法

@Overridepublic int compareTo(Person o) {return this.getAge() - o.getAge();}


排序使用:1.对象数组,用Arrays.sort(people);  2.集合,用Collections.sort(people)


还有一种就是Comparator接口,看其他博客都将Comparator排序接口叫做【外部比较器】,而将Comparable排序接口叫做【内部比较器】,

这么说基本没啥大问题,顾名思义,也就是说Comparable用在排序类的内部,Comparator用在排序类的外部。


就我的理解而言,在什么场景下使用Comparator呐?一般是被比较的对象没有实现Comparable接口,然而又想按照某种我们自定义的规则进行

比较,但是又不能修改那个类本身,Comparator就是适合这种场景,新建一个类实现Comparator接口(如PersonComp),实现compare方法,

排序的时候就可以用:

1.对象数组,用Arrays.sort(people,new PersonComp());  2.集合,用Collections.sort(people,new PersonComp())


不过这似乎有点麻烦,专门为一个排序写一个类,然后只实现一个方法,大财小用了,没关系,我们还可以用如下这种方式使用Comparator接口

Arrays.sort(people,new Comparator<Person>() {public int compare(Person o1, Person o2) {return o1.getAge()-o2.getAge();}});

对应的people集合就可以用

Collections.sort(people,new Comparator<Person>() {public int compare(Person o1, Person o2) {return o1.getAge()-o2.getAge();}});


另外,其实Comparator也是可以当作【内部比较器】来用的,比如类Person也可以实现Comparator接口,然后实现compare方法,只是在调用

的时候注意也要用对应的Comparator的调用方式才是,比如Arrays.sort(people,new  Person())。(people是Person类型的数组,并且实现了Comparator接口


不过.....既然可以修改排序对象类,干嘛不用Comparable呐?哈哈,所以上述方法有点鸡肋了,不过主要说明的是它也可以这么用而已。大笑




原创粉丝点击