Queue介紹


美人如斯!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阻塞隊列:阻塞式隊列,某些出隊和入隊操做會阻塞
相關文章
相關標籤/搜索