Java에서 Generics 사용법에 익숙합니다.Collections 유틸리티 클래스의 정렬 함수 구현 비교
왜 원시
는ListIterator
Comparable
에 왜 기반의 정렬 기능의 매개 변수ListIterator
입니다 :// 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]); } }
내가 이해하려는 것은
Collections.java
클래스의 정렬 기능을 다음과 우연히 만났다Comparator
을 기준으로 정렬 기능에 사용됩니까?Comparable
에 따라 분류 기능 필요 (T
에) 캐스팅 유형입니다 왜for
루프에서왜 캐스팅
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
유형을 이미 매개 변수로 확인하지 않은 경우입니다. –
좋아, 사물을 명확히 해준 Peter. – user1586907