Java中Comparator的使用
Comparable与Comparator的区别
Comparable & Comparator
都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator
是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator
接口的方法或在集合内实现 Comparable
接口的方法,Comparator
位于包java.util下,而Comparable
位于包java.lang下。
Java中有两种方式来提供比较功能。第一种是实现java.lang.Comparable接口,使你的类天生具有比较的能力,此接口很简单,只有一个compareTo
一个方法。此方法接收另一个Object为参数,如果当前对象小于参数则返回负值,如果相等则返回零,否则返回正值,也就是:
x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比y小”;返回“零”,意味着“x等于y”;返回“正数”,意味着“x大于y”。
使用Comparable比较的例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14class Person implements Comparable<Person>{
public int compareTo(Person person) {
return name.compareTo(person.name);
//return this.name - person.name;
}
}
ArrayList<Person> list = new ArrayList<Person>();
// 添加对象到ArrayList中
list.add(new Person("aaa", 10));
list.add(new Person("bbb", 20));
list.add(new Person("ccc", 30));
list.add(new Person("ddd", 40));
Collections.sort(list); //这里会自动调用Person中重写的compareTo方法。
使用Comparator比较的例子:
1 | public class ComparatorDemo { |
可以通过两种方式去实现自定义排序:
第一种:
定义一个类去实现Comparator
接口,重写其中的compare
方法。
第二种:
其实只是语法不同,在内部就new
这个接口并重写里面的compare
方法。