PriorityQueue基于优先级堆。
若没有提供比较器,则使用Collection的自然顺序来排序元素。
PriorityQueue的iterator()不保证,以任何特定顺序,遍历队列元素。
contains() | 线性时间 |
peek()、element()、size() | 常量时间 |
offer()、poll()、remove() | O(log(n)) |
offer()、add() | Queue接口的方法 |
优先级队列demo:谁的元音字母多,谁的优先级高。
public class PriorityQueueDemo {
public static void main(String[] args) {
Comparator<String> queueComparator = new VowelComparator();
PriorityQueue<String> priorityQueue = new PriorityQueue<>(10, queueComparator);
priorityQueue.add("orange");
priorityQueue.add("fig");
priorityQueue.add("watermelon");
priorityQueue.add("lemon");
while (priorityQueue.size() != 0) {
System.out.println(priorityQueue.remove());
}
}
static class VowelComparator implements Comparator<String> {
@Override
public int compare(String x, String y) {
if (getVowelCount(x) < getVowelCount(y)) {
return -1;
} else if (getVowelCount(x) > getVowelCount(y)) {
return 1;
}
return 0;
}
//谁的元音字母多,谁就优先
public int getVowelCount(String word) {
int vowel = 0;
for (int i = 0; i < word.length(); i++) {
char chr = word.charAt(i);
if (chr == 'a' || chr == 'A' || chr == 'e' || chr == 'E'
|| chr == 'i' || chr == 'I' || chr == 'o' || chr == 'O'
|| chr == 'u' || chr == 'U')
vowel++;
}
return vowel;
}
}
}