java排序Comparator和Comparable的用法

Java API针对集合类型排序提供了两种支持:

java.util.Collections.sort(java.util.List) 

java.util.Collections.sort(java.util.List, java.util.Comparator) 

 

第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。

第二个方法要求实现一个java.util.Comparator接口。

 

java.util.Comparator接口与java.util.Comparable接口的区别:

 Comparator 和 Comparable 相同的地方

两个都是java接口用来对自定义class比较大小的,

什么是自定义class: 如 public class Person{ String name; int age }.

 

当我们有这么一个List,里面包含Person对象时, 比如:

List<Person> mList=new ArrayList<Person>();

mList.add(new Person("zhangsan",1));

mList.add(new Person("liming",2));

mList.add(new Person("wangwu",3));

我们不可以直接使用Collections.sort(mList)进行排序,因为Person并没有实现Comparble接口,除非这样Person implement Comparable;但是Stirng却是可以排序 例如:

List<String> mList=new ArrayList<String>();

mList.add(“b”);

mList.add(“a”);

mList.add(“c”);

Collections.sort(mList);是可以将mList中的元素排序的

这是因为String已经实现了Comparble接口,如下图:

Comparator 和 Comparable 的区别:

Comparable 定义在 Person类的内部,也即自身实现这个接口:

 因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象了,它的比较功能和String完全一样,可以随时随地的拿来比较大小,因为Person现在自身就是有大小之分的。Collections.sort(List)可以得到正确的结果

java排序Comparator和Comparable的用法_第1张图片

Comparator 是定义在Person的外部的,也就是重新创建一个类实现Comparator<Person>.

比如 Compartors implement Comparator<Person> {};在这个比较器里面按照自定义规则对Person大小进行比较; Collections.sort(mList , new PersonCompare())可以得到正确的比较结果

java排序Comparator和Comparable的用法_第2张图片

 ps:上面不论implement哪一个接口,都需要复写compare(),参数不同而已,但是它们都是返回int类型的值,这个int值只有3个就是 -1,0,1

-1:说明前面<后面

0 :说明前面=后面

 1:说明前面>后面

        点击打开代码下载链接

 

你可能感兴趣的:(java排序Comparator和Comparable的用法)