java集合——队列和双端队列+优先级队列
【0】README
0.1) 本文描述轉自 core java volume 1, 源代碼為原創,旨在理解 java集合——隊列和雙端隊列+優先級隊列 的相關知識;
0.2) for full source code , please visit https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/DequeTest.java + https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/PriorityQueueTest.java
【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
- java.util.AbstractQueue
- 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)看個荔枝:
總結
以上是生活随笔為你收集整理的java集合——队列和双端队列+优先级队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黎明个人资料 黎明个人资料有什么
- 下一篇: java集合——映射表+专用集合映射表类