Java中Deque特性及API

2021-09-19 04:27:53 字數 1449 閱讀 1086

定義

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

特性:插入、刪除、獲取操作支援兩種形式:快速失敗和返回null或true/false

既具有fifo特點又具有lifo特點,即是佇列又是棧

不推薦插入null元素,null作為特定返回值表示隊列為空

未定義基於元素相等的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

應用場景

滿足fifo場景時

滿足lifo場景時,曾經在解析xml按標籤時使用過棧這種資料結構,但是卻選擇stack類,如果在進行棧選型時,更推薦使用deque類,應為stack是執行緒同步

主要實現

arraydeque: 基於陣列實現的線性雙向佇列

linkedlist: 基於鍊錶實現的鏈式雙向佇列

PHP中的Trait 特性及作用

自 php 5.4.0 起,php 實現了 復用的乙個方法,稱為 traits。traits 是一種為類似 php 的單繼承語言而準備的 復用機制。trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用方法集。traits 和類組合的語義是定義了一種方式來減少複雜性...

如何理解和熟練運用js中的call及apply?

function cat cat.prototype var blackcat new cat blackcat.say 用的比較多的,通過document.getelementsbytagname選擇的dom 節點是一種類似array的array。它不能應用array下的push,pop等方法。我...

如何理解和熟練運用js中的call及apply?

obj.call thisobj,arg1,arg2,兩者作用一致,都是把obj 即this 繫結到thisobj,這時候thisobj具備了obj的屬性和方法。或者說thisobj 繼承 了obj的屬性和方法。繫結後會立即執行函式。function add j,k function sub j,k...