Java中Deque特性及API


美人如斯,文章如斯!


定義

雙向隊列:支持插入刪除元素的線性集合

特性:

  1. 插入、刪除、獲取操作支持兩種形式:快速失敗和返回nulltrue/false
  2. 既具有FIFO特點又具有LIFO特點,即是隊列又是棧
  3. 不推薦插入null元素,null作為特定返回值表示隊列為空
  4. 未定義基於元素相等的equals和hashCode

UML類圖


Deque繼承關系


接口操作

接口分析

雙向隊列操作
插入元素
  • addFirst(): 向隊頭插入元素,如果元素為空,則發生NPE

  • addLast(): 向隊尾插入元素,如果為空,則發生NPE

  • offerFirst(): 向隊頭插入元素,如果插入成功返回true,否則返回false

  • offerLast(): 向隊尾插入元素,如果插入成功返回true,否則返回false

移除元素
  • removeFirst(): 返回並移除隊頭元素,如果該元素是null,則發生NoSuchElementException

  • removeLast(): 返回並移除隊尾元素,如果該元素是null,則發生NoSuchElementException

  • pollFirst(): 返回並移除隊頭元素,如果隊列無元素,則返回null

  • pollLast(): 返回並移除隊尾元素,如果隊列無元素,則返回null

獲取元素
  • getFirst(): 獲取隊頭元素但不移除,如果隊列無元素,則發生NoSuchElementException

  • getLast(): 獲取隊尾元素但不移除,如果隊列無元素,則發生NoSuchElementException

  • peekFirst(): 獲取隊頭元素但不移除,如果隊列無元素,則返回null

  • peekLast(): 獲取隊尾元素但不移除,如果隊列無元素,則返回null

棧操作

pop(): 彈出棧中元素,也就是返回並移除隊頭元素,等價於removeFirst(),如果隊列無元素,則發生NoSuchElementException

push(): 向棧中壓入元素,也就是向隊頭增加元素,等價於addFirst(),如果元素為null,則發生NPE,如果棧空間受到限制,則發生IllegalStateException

應用場景

  1. 滿足FIFO場景時
  2. 滿足LIFO場景時,曾經在解析XML按標簽時使用過棧這種數據結構,但是卻選擇Stack類,如果在進行棧選型時,更推薦使用Deque類,應為Stack是線程同步

主要實現

  • ArrayDeque: 基於數組實現的線性雙向隊列
  • LinkedList: 基於鏈表實現的鏈式雙向隊列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM