1. 程式人生 > >java集合——佇列和雙端佇列+優先順序佇列

java集合——佇列和雙端佇列+優先順序佇列

【0】README

【1】雙端佇列:可以讓人們有效地在頭部和尾部同時新增和刪除元素。

1.0) Deque API are as follows :

  • java.util.Interface Deque
    Type Parameters:
    E - the type of elements held in this collection
  • All Superinterfaces:
    Collection, Iterable, Queue
  • All Known Subinterfaces:
    BlockingDeque
  • All Known Implementing Classes:
    ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList

1.1)在java SE6中, 引入了 Deque介面, 並由 ArrayDeque 和 LinkedList 類實現。 這兩個類提供了雙端佇列, 而且在必要的時候增加佇列長度;

  • API java.util.Queue 5.0
    boolean add(E element)
    boolean offer(E element)
    如果佇列沒有滿, 將給定 的元素新增到這個雙端佇列的尾部並返回 true。 如果佇列滿了,第一個方法將丟擲一個 IllegalStateException, 而第二個方法返回 false;

  • E remove() + E poll()
    假如佇列不為空, 刪除並返回這個佇列頭部的元素。如果佇列為空,第一個方法丟擲 NoSuchElementException, 而第二個方法返回 null;

  • E element() + E peek()
    如果佇列不為空, 返回這個佇列頭部的元素, 但不刪除。如果隊裡為空, 第一個方法將丟擲一個 NoSuchElementException , 而第二個方法返回 null;
    (注意到, 以上方法中的第一個方法總是丟擲異常, 而第二個方法返回null 或者 false)

  • API java.util.Deque 6
    void addFirst(E e)
    void addLast(E e)
    //以上兩個方法出錯,拋異常;
    boolean offerFirst(E e)
    boolean offerLast(E e)
    //以上兩個方法出錯,return false;
    將給定的物件新增到 雙端佇列的頭部和尾部。 如果佇列滿了, 前兩個方法將丟擲一個 IllegalStateException, 而後面兩個方法返回 false;

  • E removeFirst()
    E removeLast()
    //以上兩個方法出錯,拋異常;
    E pollFirst()
    E pollLast()
    //以上兩個方法出錯,return null;
    如果佇列不為空, 刪除並返回佇列頭部的元素;如果佇列為空, 前面兩個方法將丟擲一個 NoSuchElementException, 而後面兩個方法返回 null;

  • E getFirst()
    E getLast()
    //以上兩個方法出錯,拋異常;
    E peekFirst()
    E peekLast()
    //以上兩個方法出錯,return null;
    如果佇列不為空, 返回佇列頭部的元素但不刪除;如果佇列為空, 前面兩個方法將丟擲一個 NoSuchElementException, 而後面兩個方法返回 null;

  • API java.util.ArrayDeque 6
    ArrayDeque()
    ArrayDeque(int intialCapacity)
    用初始容量16或給定的初始容量構造一個無限雙端佇列;
    這裡寫圖片描述

【2】優先順序佇列

  • java.util.Class PriorityQueue
  • java.lang.Object
  • java.util.AbstractCollection
    • java.util.AbstractQueue
      • java.util.PriorityQueue
  • Type Parameters:
    E - the type of elements held in this collection
  • All Implemented Interfaces:
    Serializable, Iterable, Collection, Queue

2.1)優先順序佇列中的元素可以按照任意順序插入, 卻總是按照排序的順序檢索;也就是說, 無論何時呼叫 remove方法, 總會獲得當前優先佇列中最小的元素;

  • 2.1.1)優先佇列使用了一個高效的資料結構——堆。(詳見資料結構 的堆,大根堆和小根堆)
  • 2.1.2)和TreeSet一樣, 一個優先佇列既可以儲存實現了 Comparable介面的類物件, 也可以儲存在構造器中提供比較器的物件;
  • 2.1.3)優先順序佇列的典型應用是任務排程。 每一個任務有一個優先順序, 任務以隨機順序新增到佇列中。 每當啟動一個新的任務時, 都將優先順序最高 的任務從佇列中刪除;

2.2)看個荔枝:
這裡寫圖片描述
這裡寫圖片描述

API java.util.PriorityQueue 5.0
PriorityQueue()
PriorityQueue(int initialCapacity)
PriorityQueue(int initialCapacity, Comparator<? super E> c)
構造一個優先佇列, 並用指定 的比較器對元素進行排序;