Yes, PriorityQueue has a constructor that allows you to a pass a Comparator to define the order of the elements. For example, if you have the following Bar class:
public class Bar {
private int priority;
// getters / setters ...
}
And you want to create a priority queue that orders the elements based on the priority field (e.g., items with greater priority stay in the front of the queue), you can use the following:
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
}
});
If you have more complex logic in the compare method, or if you want to reutilize the code, then I suggest you create a class, say BarComparator, that implements Comparator<Bar>.
Also, as an alternative to the above, you can make Bar implement the Comparable interface, and use the empty constructor, like so:
public class Bar implements Comparable<Bar> {
private int priority;
@Override
public int compareTo(Bar b) {
return b.getPriority() - this.priority;
}
}
Hope it helps.