2012-10-06 2 views
0

우선 순위 큐가 처음입니다. 구현하려고하는 알고리즘에서 저장 노드의 functionValue에 따라 우선 순위 큐를 정렬하려고합니다. 우선 순위 큐가 내 노드 객체의 다른 8 개의 인스턴스 변수 중 하나와 반대되는 값으로 노드를 정렬하는 방법을 알지 못합니다. 필자는 Comparator 객체를 정의하여 비교/정렬 규칙을 정의한다고 확신하지만 Comparator에 대한 Oracle 클래스 라이브러리의 헤드 또는 테일을 만들 수 없습니다. 매우 간단한 인터페이스는 여기에 저장된 노드 값 중 하나를 기준으로 우선 순위 큐를 정렬하려고합니다.

내 노드 클래스

public class Node{ 

public char label;  //Holds char for the Move used; U, D, L, R 
public boolean visited = false; 
public State nodeState; //Each node holds a State object 
int depth; 
int heuristicCount; 
int functionCount; <--- This is the property I want the priority queue to sort by. 
. 
. 
. 

답변

1

Comparator의 재산입니다. 그것으로 당신의 어려움은 무엇입니까? 핵심 비트는 compare method입니다. 이를 구현하여 클래스의 두 인스턴스를 비교하면됩니다. 다음과 같이 입력하십시오 :

public class NodeComparator implements Comparator<Node> { 
    public int compare(Node a, Node b) { 
     Integer aCount = a.getFunctionCount(); 
     Integer bCount = b.getFunctionCount(); 
     return a.compareTo(b); 
    } 
} 
+0

죄송합니다.이 인터페이스 아이디어는 저에게 새로운 것입니다. 나는 아주 원시적 인 배경에서 왔다고 생각한다. 도와 줘서 고마워! – Gthoma2

+1

걱정할 필요가 없습니다. 함수 포인터가있는 배경에서오고 있다면 함수 포인터가 다른 언어로 된 같은 위치에서 Java에서 인터페이스가 자주 사용된다는 것을 아는 것이 유용 할 수 있습니다. 예를 들어, 비교기는 [qsort] (http://pubs.opengroup.org/onlinepubs/009695399/functions/qsort.html)의'compar' 인수와 정확히 똑같이 사용되고 있습니다. Java 8에는 특정 인터페이스를 함수 포인터와 거의 똑같이 동작하도록 만드는 새로운 마법이 포함됩니다. –

관련 문제