问题描述
- Collections.sort的源码问题
-
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
解决方案二:
你的代码返回排序后的列表,原始的代码对原来的list排序,两者没有可比性。
解决方案三:
经过你改写后,返回的是一个新创建定长的java.util.Arrays.ArrayList,不能添加或删除元素
而原方法返回类型为void,在没有新创建List对象的前提下,对参数List中元素进行了排序,性能较高
解决方案四:
原方法节省了空间
而且通用于list的各种实现
你的返回类型为ArrayList
时间: 2025-01-01 14:09:01