2
我對Java中的泛型使用非常新穎。Collections實用類中實現排序功能的比較
遇到以下功能Collections.java
類排序
// 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]);
}
}
我想了解的是:
爲什麼是基於
Comparable
爲什麼原料ListIterator
ListIterator
在排序函數參數用於基於Comparator
的分類功能?在
for
循環爲什麼需要排序功能基於Comparable
類型轉換(到T
),爲什麼基於Comparator
鑄造不for
循環排序函數的必要嗎?
我覺得下面的代碼將有更多的類型安全的比較基於排序功能:
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]);
}
}
假設輸入列表已被參數化,在第二種情況下允許設置任何對象是不是一個錯誤? – user1586907 2012-08-09 09:08:43
這是如果你沒有檢查已經作爲參數的類型。 – 2012-08-09 09:10:20
好的,謝謝彼得澄清事情 – user1586907 2012-08-10 11:33:19