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)可以得到正确的结果
Comparator 是定义在Person的外部的,也就是重新创建一个类实现Comparator<Person>.
比如 Compartors implement Comparator<Person> {};在这个比较器里面按照自定义规则对Person的大小进行比较; Collections.sort(mList , new PersonCompare())可以得到正确的比较结果
ps:上面不论implement哪一个接口,都需要复写compare(),参数不同而已,但是它们都是返回int类型的值,这个int值只有3个就是 -1,0,1
-1:说明前面<后面
0 :说明前面=后面
1:说明前面>后面
点击打开代码下载链接