美人如斯!java
前言
隊列是一種先進先出(FIFO)的數據結構,與生活中的排隊相似,即先來先被服務,這樣的特色決定了其具備必定的優先級含義,能夠被用於任務調度等場景。隊列模型如圖:
數據結構
圖1.隊列模型
spa
java中的Queue
1.接口類Queue
java中經過定義Queue接口類及一系列行爲來描述隊列。隊列的操做通常包括:出隊和入隊,Queue接口針對這些操做定義了三種行爲:code
- 插入:入隊,向隊列插入一個元素;
- 移除:出隊,從隊列中移除一個元素;
- 檢查:從隊列中獲取一個元素,可是不移除;
其中每種行爲又分爲兩種形式:blog
- 快速失敗(fail-fast),當即拋出異常
- 返回特定的值,根據實現的不一樣,返回
null
或者false
Queue的UML類圖以下:
接口
圖2.Queue UML圖
隊列
- add(): 向隊列中增長一個元素,若是隊列已滿,將拋出IllegalStateException異常,增長成功,返回true;
- offer(): 同add操做很相似,都是向隊列中插入元素,區別在於,若是隊列已滿時,插入返回false;
- remove(): 獲取並移除隊列頭部的元素,若是隊列是空,將拋出NoSuchElementException異常;
- poll(): 同remove操做很相似,區別在於,若是隊列是空,將返回null;
- element(): 獲取但不移除隊頭元素,若是隊列是空,將拋出NoSuchElementException異常;
- peek(): 同element操做很相似,區別在於,若是隊列是空,返回null;
2.實現
Queue的實現種類繁多,不一樣的實現有不一樣的應用場景。先經過總結性的歸納下其繁雜的種類,而後再分析些常見的隊列。
根據以上UML圖能夠看出,根據不一樣的特色,Queue大體能夠分爲三種類型:
Queue的UML類圖以下:
圖片
圖2.Queue UML圖
element
- Queue的直接實現
- Deque雙向隊列:隊頭和隊尾均能進行入隊和出隊操做
- BlockingQueue阻塞隊列:阻塞式隊列,某些出隊和入隊操做會阻塞