Java之優先隊列

PriorityQueue屬於Java Collections Framework。PriorityQueue基於優先級堆,它是Queue接口的實現。當咱們須要一個Queue實現時,能夠使用這種數據結構,java

而且咱們須要根據每一個元素的優先級,以特定的排序順序來維護該集合的元素。它在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集合。ide

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 watermelonhttp://javapapers.com/java/search-file-using-nio/
相關文章
相關標籤/搜索