2014-04-01 4 views
0

나는 연결리스트 또는 배열을 정렬하는 일반적인 자바 방법을 구축 필요 할당 작업을하고 있지만 그게 가능할 것이다 방법을 이해하지 않습니다. 반복자없이 인덱싱 및 교환 요소가 선형의 시간이 걸릴 것이기 때문에 반복자와 함께 작동합니다배열과 연결된 목록을 동등하게 정렬하는 일반적인 방법을 만드는 것이 가능합니까?

+2

아니, 방법을 과부하. –

+0

아니요, 배열과 컬렉션의 공통 수퍼 클래스가 없기 때문에 (실제로 Object 이외의)이 작업은 실제로 수행 할 수 없습니다. 나는 여러분의 메소드가'Object'를 인수로 삼고'instanceof'를 사용하여 실제로 무엇인지를 탐지 할 수 있다고 생각합니다. 그러나 메서드를 오버로드하는 것이 훨씬 낫습니다. –

답변

0

LinkedList 정렬 구현은 효율적입니다. 따라서 LinkedList 및 배열 (또는 ArrayList)의 일반적인 정렬은별로 의미가 없습니다.

당신은 정렬 일반적인 ArrayList 및 배열을 작성하는 예를 들어, 일부 인덱스에서 요소를 가져오고 설정, 두 개의 람다와 구현을 제공 할 수 싶습니다 :

private static interface Get<E> { 
    E get(int index); 
} 

private static interface Set<E> { 
    void set(int index, E e); 
} 

private static <E extends Comparable<? super E>> void sort(
     Get<E> get, Set<E> set, int size) { 
    // ... sorting algorithm 
} 

public static <E extends Comparable<? super E>> void sort(E[] array) { 
    // more verbose syntax if you use Java 7, but it shouldn't affect performance 
    sort(i -> array[i], (i, e) -> { array[i] = e; }, array.length); 
} 

public static <E extends Comparable<? super E>, T extends List<E> & RandomAccess> 
sort(T arrayList) { 
    sort(arrayList::get, arrayList::set, arrayList.size()); 
} 

내가 측정하지 않았다 ,이 imlementation은 JIT가 lambda를 완벽하게 인라인 할 수 있기 때문에 이전의 단순한 접근 방식보다 훨씬 느려서는 안됩니다.

관련 문제