Java Collections
最近看了看Utility Class—Collections,发现两位大神—Josh Bloch和Neal Gafter,其中Josh Bloch就是Effective Java的作者。
这次简单介绍一下sort方法
Collections.sort()
@SuppressWarnings("unchecked")
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
其中有两点值得注意
(0): 该方法是一个静态方法,说明是一个工具(实用)方法(utility method),而不是一个实例方法;
(1):另外就是关于generic type,如果对于<T extends Comparable<? super T>>
中为什么用super不理解,请您看看另外一个大神Cay S. Horstmann在Core Java(Volume I, 10th Edition)的第八章Generic Programming的8.8.2 Supertype Bounds for Wildcards的例子(p446)。
接口List的sort方法
@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
Note:
该方法是JDK1.8中实现的一个默认方法,是用关键字default(有关default的用法,请您看Core Java(Volume I, 10th Edition))第六章中6.1.5 Default Methods。
Arrays.sort()
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
Notes:
(0)这个方法最大的亮点是采用Tim Peters对list排序的思想。
(1)TimSort for python。
下一次详细介绍TimSort中用到的binarySort(Object[] a, int lo, int hi, int start)
。