PriorityQueue屬於Java Collections Framework。PriorityQueue基於優先級堆,它是Queue接口的實現。當我們需要一個Queue實現時,可以使用這種數據結構,
並且我們需要根據每個元素的優先級,以特定的排序順序來維護該集合的元素。它在JDK 1.5中引入
Java 之優先隊列要點
- 在實例化PriorityQueue時,可以在構造函數中提供比較器。然后隊列中的項目順序將根據提供的比較器來決定。
- 如果沒有提供比較器,則將使用Collection的自然順序(Comparable)來排序元素。
- 此集合中不允許為null。
- 排隊隊長是排序中最少的項目。
- PriorityQueue元素之間的排序關系是任意決定的。
- PriorityQueue未同步。PriorityBlockingQueue是PriorityQueue的線程安全對應。
- PriorityQueue是無界的,它會根據隊列中的元素數量動態增長。它在任何給定時間都具有內部能力,隨着元素的添加而增加。這種內部容量和增量的政策沒有指定或標准化。
- 此PriorityQueue的iterator()不保證以任何特定順序遍歷隊列元素。
- 表現明智 remove()和contains()方法采用線性時間。peek(),element()和size()需要固定的時間。offer(),poll()和remove()取O(log n)時間。
- offer()和add()是Queue接口的方法,由PriorityQueue實現。這些用於在隊列中插入元素。他們在PriorityQueue方面的表現相同,沒有區別。
PriorityQueue示例
以下示例說明了如何使用Java PriorityQueue集合。
PriorityQueueExample.java
package com.javapapers.java; import java.util.Comparator; import java.util.PriorityQueue; public class PriorityQueueExample { public static void main(String[] args) { Comparator<String> queueComparator = new VowelComparator(); PriorityQueue<String> priorityQueue = new PriorityQueue<String>(10, queueComparator); priorityQueue.add("orange"); priorityQueue.add("fig"); priorityQueue.add("watermelon"); priorityQueue.add("lemon"); while (priorityQueue.size() != 0) { System.out.println(priorityQueue.remove()); } } }
VowelComparator.java
此Comparator類用於確定上述PriorityQueue的排序順序。
package com.javapapers.java; import java.util.Comparator; 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; } }
PriorityQueue示例輸出:
fig lemon orange watermelon
http://javapapers.com/java/search-file-using-nio/