Comparable:
Comparable 接口仅仅只包括一个函数,如下所示:
public interface Comparable<T> {
public int compareTo(T o);
}
Comparator:
我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);那么,我们可以建立一个“该类的比较器”来进行排序。
Comparator的接口函数的定义如下:
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
1.实现Comparable接口。
public class Person implements Comparable<Person1>
{
private int age;
public Person(int age)
{
this.age = age;
}
@Override
public int compareTo(Person o)
{
return this.age-o.age;
}
@Override
public String toString()
{
return age+"";
}
}
这个就是主要把Comparable里面的compareTo函数重写,在函数里面定义一种比较大小的办法。
然后利用如下的代码测试程序:
Person person1 = new Person(18);
Person person2 = new Person(17);
List<Person> list = new ArrayList<>();
list.add(person1);
list.add(person2);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
得到结果:
18 17
17 18
1.实现Comparator接口。
实现Comparator可以直接在Collections.sort里面将类里面的compare方法重写。如下所示:
Person p1 = new Person(18);
Person p2 = new Person(17);
List<Person> list = new ArrayList<Person>();
list.add(p1);
list.add(p2);
System.out.println(list);
Collections.sort(list,new Comparator<Person>(){
@Override
public int compare(Person p1, Person p2)
{
if(p1 == null || p2 == null)
return 0;
return p1.getAge()-p2.getAge();
}
});
System.out.println(list);
也会得到:
18 17
17 18
所以,可以得到Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。