1. 隊列簡介
Stack屬於先進後出(First In Last Out、FILO), 而隊列本質上指的是先進先出(First In First Out、FIFO), 從本質上來講隊列與棧是一組相對的存儲結構,同時在許多實際的項目開發裏面,隊列都發揮着非常重要的作用,在java類集裏面提供有兩個隊列: Queue、Deque (是Queue子接口)。
- public interface Deque extends Queue
- public interface Queue extends Collection
類結構如下圖所示:
隊列的出現是爲了解決資源緊張的設計問題,因爲資源不足,就拿店面來講,只有一個售賣窗口,但是買的人太多了,所以只能夠進行排隊依次梳理,隊列的出現解決的是數據緩衝的問題。
2. Queue接口
Queue是隊列實現的標準的操作接口,在這個接口裏面提供有如下的隊列操作方法。
如下圖所示:
No. | 方法名稱 | 類型 | 描述 |
---|---|---|---|
01 | boolean add(E e) | 方法 | 【Exception】增加隊列數據,追加失敗拋出異常 |
02 | boolean offer(E e) | 方法 | 向隊列追加數據,追加成功返回true,否則返回false |
03 | E remove() | 方法 | 【Exception】從裏面取出數據的同時刪除 |
04 | E poll() | 方法 | 從隊列中獲取數據 |
Queue是一個接口,如果想要獲取Queue對象的實例,那麼就必須依靠子類,可以使用LinkedList、PriorityQueue 兩個子類。
如下圖所示:
此時可以發現,最早保存的數據最先進行了取出,而最晚保存的數據最後進行了取出,由於LinkedList是基於鏈表的實現,所以此時並不會改變存儲的數據順序。優先隊列的數據將進行排序,隨後將排序後的內容進行依次的輸出。
3. Deque接口
Queue是隊列操作的標準形式,它採用的模式就是FIFO,而與Queue對應的是Deque接口,這個接口是Queue子接口,而且它所實現的隊列,擁有雙向的操作能力,可以通過隊首實現數據的增加與彈出,也可以在隊尾上實現數據的增加與彈出。Deque接口裏面有兩個常見的子類: ArrayDeque、 LinkedList, 觀察ArrayDeque 繼承結構。
使用Deque的時候一定包含有Queue接口中所有的方法,同時也有自己擴充的方法。默認隊列大小爲16。
方法如下圖所示: