1. Collections.sort()方法
看看方法的签名:
1)public static <T extends Comparable<? super T>> void sort(List<T> list)
以及相应的说明:根据元素的自然顺序对指定列表按升序进行排序。列表中的所有元素都必须实现Comparable接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。
可以看出,默认的情况对付String对象没什么问题,但如果是普通的对象,则必须实现Comparable接口,否则无法通过编译。
看看Comparable接口:public interface Comparable<T>此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。
对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与equals一致。注意,null 不是任何类的实例,即使 e.equals(null) 返回 false,e.compareTo(null) 也将抛出 NullPointerException。
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
2)public static <T> void sort(List<T> list,Comparator<? super T> c)
2. Arrays.sort()方法1)public static void sort(int[] a) public static void sort(int[] a,int fromIndex,int toIndex)
fromIndex - 要排序的第一个元素的索引(包括)toIndex - 要排序的最后一个元素的索引(不包括)
fromIndex - 要排序的第一个元素的索引(包括)toIndex - 要排序的最后一个元素的索引(不包括)c - 确定数组顺序的比较器。null值指示应该使用元素的自然排序引出另一种比较器:Comparator使用comparaTo()方法时,list中的元素只能有一种将自己与同类型的另一个元素做比较的方法。但Comparator是独立于所有比较元素之外的——它是独立的类!因此可以有各种不同的比较方法。
public interface Comparator<T>强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Aarrys.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator来控制某些数据结构(如有序Set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
int compare(T o1,T o2)比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。 (责任编辑:未知)