2014-04-17 2 views
1

정렬 된 연결된 목록 숙제에 대해 작업 중이며 비교 자 설정에 대해 혼란 스럽습니다. 모든 클래스를 받아들이도록 매개 변수화 된 연결된 목록 클래스를 작성했습니다. 연결된 목록 잘 작동하지만 그것은 매개 변수화 된 때문에 목록에 대한 비교자를 설정하는 방법에 대해 혼란스러워. 먼저 비교 자 클래스를 만들어 생성자에 전달합니까? 비교자를 사용하여 목록의 순서를 유지합니다. 또는 연결된 목록 클래스에 정의 된 비교 자의 동작을 변경하는 클래스 내에 변수가 있어야합니까? 죄송합니다. 약간 혼란 스럽기 때문에 이것이별로 의미가 없습니다. 감사!매개 변수가있는 연결된 목록의 인스턴스화시 비교기 설정

편집 :

이 가 (예 나는 실제로 그렇게하지 않을 알고 있지만 그 자체가 내가 명확히해야, 우리가, 우리가 설계하고 자바 컬렉션 라이브러리에서 LinkedList의를 사용할 수 없습니다 우리의

숙제 디자인 엑소시즘). 내 LinkedList 클래스는 다음과 같이 표시됩니다.

public class LinkedList<T> implements Iterable<T> { 
    private LinkedListNode<T> head = null; 
    private int size = 0; 
     . 
     . 
     . 
     //various methods for retrieving size, iterator etc... 
} 

요소를 삽입 할 때 올바른 위치에 배치해야합니다. 내 생각은 LinkedList 객체의 인스턴스 생성시 전달되는 비교 자에 의해 결정되도록하는 것입니다. 이 같은 아마 뭔가 :

LinkedList<MyClass> myList(MyClass.myComparator); 

내 문제는 내가 객체의 수명 전반에 걸쳐 사용되는 동일한 클래스 (MyClass에) 여러 비교기를 가질 필요가 있다는 것입니다. 또한 LinkedList에서 비교자를 설정하는 방법으로 혼란스러워합니다.

+0

일부 코드는 귀하의 답변에 도움이됩니다. 당신이 설명하는 것에서부터 당신은 생성자에 비교자를 전달할 필요가있을 것이고 add 메소드에서 그것을 사용하여 항목을 추가 할 위치를 결정할 것입니다 – BrendanMcKee

답변

0

LinkedList은 정렬 된 컬렉션이 아니므로 구성 중에 Comparator를 전달할 수 없습니다. 생성자 중 어느 것도 Comparator을 차지하지 않는 것을 관찰하십시오.

대신에, 당신은 그것을 구축하고 여기에 추가 한 다음 당신은 쓰기 다음 구문 파라미터 화 된 형태 TComparator 할 수

Collections.sort(myList, new MyComparator()); 

을 사용합니다.

public class MyComparator implements Comparator<T>() { 
     public int compare (T a, T b) { 
      // Put comparison logic here. 
     } 
} 

은 물론, 당신은 당신의 형의 이름으로 위의 T를 교체합니다.