如今咱們看看這個類AbstractQueue,此類提供某些Queue操做的核心實現。方法add,remove和element分別基於offer,poll和peek,但拋出異常而不是經過false或null返回指示失敗。前端
擴展此類的Queue實現必須最低限度地定義一個方法Queue.offer(E),該方法不容許插入null元素,以及Queue.peek(),Queue.poll(),Collection.size()和Collection.iterator()方法。一般,還會覆蓋其餘方法。若是沒法知足這些要求,請考慮繼承AbstractCollection。後端
這裏只有一個protected的構造方法,其實裏面是什麼都沒有作的。數組
而後,咱們看看具體AbstractQueue有哪些方法,這裏主要是實現了接口Queue<E>的方法。3d
add(E e)方法:若是能夠在不違反容量限制的狀況下當即執行此操做,則將指定的元素插入此隊列,成功時返回true,若是當前沒有可用空間則拋出IllegalStateException。加入成功,那麼就會放回true。這裏用的是offer方法的實現blog
remove()檢索並刪除此隊列的頭部。若是元素不存在就拋出NoSuchElementException異常。這裏用的是poll方法的實現。繼承
element()檢索返回但不刪除此隊列的頭部。用的是peek()方法。接口
clear()方法在while裏面調用poll()直到返回null。隊列
addAll(Collection<? extends E> c)方法須要Collection參數是非空的,還有不能包含本身,遍歷調用add方法,若是修改了,就是modified=true。element
上面就是AbstractQueue中的方法。rem
而後,我看看隊列的定義吧。
隊列,又稱爲佇列(queue),是先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中一般用鏈表或者數組來實現。隊列只容許在後端(稱爲rear)進行插入操做,在前端(稱爲front)進行刪除操做。
隊列的操做方式和堆棧相似,惟一的區別在於隊列只容許新數據在後端進行添加。
有什麼討論的內容,能夠加我公衆號: