2009-09-19 13 views
4

Java에서 우선 순위를 결정하는 키가 객체의 멤버 인 객체의 PriorityQueue를 만들 수 있습니까?Java의 우선 순위 대기열?

net에서 볼 수있는 모든 예제는 PriorityQueue에 정수를 삽입하고 검색합니다. 개체의 인스턴스를 삽입하고 정수 일 수있는 멤버 값 중 하나를 기반으로 검색되는 구현을 찾고 있습니다.

답변

17

예, PriorityQueue에는 을 전달하여 요소의 순서를 정의 할 수있는 constructor이 있습니다. 예를 들어, 다음 Bar 클래스가있는 경우 :

public class Bar { 
    private int priority; 

    // getters/setters ... 
} 

을 그리고 당신이 priority 필드에 따라 요소를 순서가 우선 순위 큐를 만들려면 (예를 들어, 큐의 앞에 더 큰 우선 순위 숙박과 항목) 다음과 같은 사용할 수 있습니다 : 당신이 compare 방법으로 더 복잡한 논리가있는 경우

Queue<Bar> queue = new PriorityQueue<Bar>(new Comparator<Bar>() { 
    public int compare(Bar a1, Bar a2) { 
    return a2.getPriority() - a1.getPriority(); // adapt this to your needs 
    } 
}); 

을하거나 코드를 reutilize 싶은 경우에, 나는 당신이 클래스를 생성 제안, Comparator<Bar>를 구현하는, BarComparator을 말한다.

또한, 상기의 대안으로, 당신은 BarComparable 인터페이스를 구현 확인하고 empty 생성자를 사용하므로 같은 수 있습니다 :

public class Bar implements Comparable<Bar> { 
    private int priority; 

    @Override 
    public int compareTo(Bar b) { 
    return b.getPriority() - this.priority; 
    } 
} 

는 도움이되기를 바랍니다.

+0

우선 순위가 더 높은 순서로 말하면, 우선 순위가 3 인 막대가 우선 순위가 큰 막대 다음에 우선 순위가 13 인 막대가 있다는 의미에서 작은 우선 순위 값을 가진 막대는 실제로 "더 큰 우선 순위 " – Tomek

+1

정반대입니다. 우선 순위가 20 인 'Bar a'는 우선 순위가 18 인 'Bar b'보다 우선 순위가 높으므로 'Bar a'가 대기열 앞에 있습니다. –