私はJavaでのジェネリックの使用法にかなり慣れていません。
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]);
}
}
私が理解したいのは:
ListIteratorに基づいて並べ替え関数でパラメーター化されるのはなぜですか?また、に基づいて並べ替え関数でrawが使用されるのはComparableなぜですか?ListIteratorComparatorループでは、に基づくソート関数
forで型キャスト ( へT) が必要なのはなぜですか?また、に基づくソート関数のループでComparableキャストが必要ないのはなぜですか?forComparator
次のコードは、コンパレータ ベースの並べ替え関数に対してよりタイプ セーフになると思います。
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]);
}
}