一、概述
Comparable和Comparator都是用来实现集合中元素的比较、排序的。
Comparable是在集合内部定义的方法实现的排序,位于java.lang下。
Comparator是在集合外部实现的排序,位于java.util下。
首先来看一下Comparable的定义:
package java.lang;
import java.util.*;
public interface Comparable<T> {
//若x.compareTo(y) <0,则x<y;若x.compareTo(y) =0,则x=y;若x.compareTo(y) >0,则x=y;
public int compareTo(T o);
}
Comparator的定义如下:
package java.util;
public interface Comparator<T> {
//如果要按照升序排序,
则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序
则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)
int compare(T o1, T o2);
boolean equals(Object obj);
}
2. Comparator 和 Comparable 的区别
Comparable 定义在 Person类的内部:
public class Persion implements Comparable {..比较Person的大小..},
因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象了,
它的比较功能和String完全一样,可以随时随地的拿来 比较大小,因为Person现在自身就是有大小之分的。
Collections.sort(personList)可以得到正确的结果。
Comparator 是定义在Person的外部的:
此时我们的Person类的结构不需要有任何变化,如
public class Person{ String name; int age },
然后我们另外定义一个比较器:
public PersonComparator implements Comparator() {..比较Person的大小..},
在PersonComparator里面实现了怎么比较两个Person的大小.
所以,用这种方法,当我们要对一个 personList进行排序的时候,
我们除了了要传递personList过去, 还需要把PersonComparator传递过去,
因为怎么比较Person的大小是在PersonComparator 里面实现的,
如: Collections.sort( personList , new PersonComparator() ).