Java Collections实用程序类中排序函数实现的比较
我对Java中泛型的用法还很陌生 在Java Collections实用程序类中排序函数实现的比较,java,generics,Java,Generics,我对Java中泛型的用法还很陌生 在Collections.javaclass中遇到了以下用于排序的函数 // Sorting based on Comparable public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T
Collections.java
class中遇到了以下用于排序的函数
// Sorting based on Comparable
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
// Sorting based on Comparator
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}
为什么在基于比较器的排序函数中使用原始ListIterator
无法创建类型为的数组?super T[]
因此它创建了一个对象[]
,并从中使用原始类型
在for循环中,为什么在基于Comparable的sort函数中需要类型转换(to T),而在基于Comparator的sort函数的for循环中不需要类型转换
在第一种情况下,您有
ListIterator
,它只能设置(T)
,在第二种情况下,您有ListIterator
,它可以设置任何对象。如果输入列表是参数化的,那么在第二种情况下允许设置任何对象不是一个错误吗?
public static <T> void Sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}