2013-04-05 2 views
12

최소 우선 순위 큐를 사용하는 알고리즘을 작성하려고합니다. 따라서 Google에서 살펴본 후 PriorityQueue를 발견했습니다. 그것은 그것을 사용하기 위해서, 내가 어떻게 그것을 우선 순위를 원한다고 말할 필요가있다. 그리고 이것을하는 방법은 비교 자로하고있다. (나는 "Node1"의 특정 데이터 필드를 비교하고 싶다. 사물). 더 많은 검색 기능이 Comparator를 구현하지만 compare 메소드를 재정의하는 새 비교기를 만드는 아이디어를 제시했습니다. 나는 그것이라고하지하는 (쟁이 오버 비교기 클래스를 가지고있다 그 중 하나는 여러 가지 이유로Java Comparator 구현

import java.util.Comparator; 

public class distComparator implements Comparator { 

    @Override 
    public int compare(Node1 x, Node1 y){ 
     if(x.dist<y.dist){ 
      return -1; 
     } 
     if(x.dist>y.dist){ 
      return 1; 
     } 
     return 0; 
    } 
} 

컴파일러 시위 : 내가 시도하고이 (뿐만 아니라 그것의 다른 변이)이다 추상)

error: distComparator is not abstract and does not override abstract method compare(Object,Object) in Comparator

나는 그 문제를 처리하는 "compare (object x, object y)"라고 바꾸기로 전환했다. 이 시점에서 컴파일러는 x 또는 y에서 "dist"변수를 찾을 수 없다는 불평을하지만, Object 클래스가 아닌 Node1 클래스의 일부이므로 의미가 있습니다.

어떻게 작동하나요? 그것은 분명히 유형 Object을 가져야합니다, 그렇다면 올바른 변수로 어떻게 지시합니까?

답변

15

당신은 Comparator<Node1>를 구현해야이없이

public class distComparator implements Comparator<Node1> { 
               ^^^^^^^ 

, 당신은 당신이 원하는 것이 아니다 (이 동작하도록 만들 수 있지만, 번거 로움 가치가 없다) Comparator<Object>을 구현하고 있습니다.

Node1dist이라는 접근 가능한 구성원이있는 경우 귀하의 질문에있는 나머지 코드는 문제가 없습니다. 당신이 자바 7을 사용하는 경우, 메소드의 몸 전체가

return Integer.compare(x.dist, y.dist); 

로 대체 될 수 있음을

주 (Node1.dist의 종류에 따라, Double 등으로 Integer를 교체합니다.)

+0

또한 쓸 수'반환 x.dist을 - y.dist' – Polygnome

+1

@Polygnome : 참여 범위에 따라이 월 또는 5 월 정수에서는 작동하지 않지만 부동 소수점 값에 대해서는 완전한 비 시작자입니다. – NPE

+0

감사합니다! 해결! –

2

로를 here을 볼 수 있습니다. Comparator 인터페이스에는이 비교기가 설계된 유형을 설명하는 일반 사항이 있습니다. 실제로는 PriorityQueue도 마찬가지입니다. 당신이 PriorityQueue<Node1>을 만들 경우

그래서, 당신은 Comparator<Node1> 만들 수 있습니다

public class distComparator implements Comparator<Node1> {  
    @Override 
    public int compare(Node1 x, Node1 y){ 
     return x.dist - y.dist; 
    } 
} 
+2

'[]'대신'<>'를 사용하십시오. –