public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator(); //AAA
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
上面的为Collections.sort的源码
我改写成了如下的形式
@SuppressWarnings("unchecked")
public static > List sort(List list) {
Object[] a = list.toArray();
Arrays.sort(a);
return (List) Arrays.asList(a);
}
总而言之
ListIterator i = list.listIterator(); //AAA
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
这部分有意思吗? 这不是把简单的问题变复杂了吗?
原方法节省了空间
而且通用于list的各种实现
你的返回类型为ArrayList
经过你改写后,返回的是一个新创建定长的java.util.Arrays.ArrayList,不能添加或删除元素
而原方法返回类型为void,在没有新创建List对象的前提下,对参数List中元素进行了排序,性能较高
你的代码返回排序后的列表,原始的代码对原来的list排序,两者没有可比性。