前言
Queue隊列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的后端進行插入操作,LinkedList類實現了Queue接口,因此我們可以把LinkedList當成Queue來用. 而LinkedList我們將在其他博客中說明.Queue接口與List、Set同一級別,都是繼承了Collection接口。LinkedList實現了Deque接口.所以基本上,一個隊列就是一個先入先出(FIFO)的數據結構
另外你需要注意:
1.Queue 是最簡單的隊列
2.Queue未實現阻塞功能,並發的添加會導致一些元素添加失敗.
一個簡單的Demo
private void demo(){ Queue<String> stringQueue = new LinkedList<>(); stringQueue.offer("A1"); //offer實現添加元素,但是如果Queue已經滿了,會返回布爾值false stringQueue.offer("A2"); stringQueue.offer("A3"); stringQueue.offer("A4"); String content = stringQueue.poll();//poll()方法提取第一個元素並且刪除它 System.out.println("被提取的元素="+content); for (String item : stringQueue){ System.out.println("剩余元素="+item); } }
上面代碼的運行結果:
被提取的元素=A1 剩余元素=A2 剩余元素=A3 剩余元素=A4
Api的一些介紹與區別
Queue的隊列十分簡單,一共就提供了6個API remove、element、offer、add、poll、peek 進行數據添加與獲取操作屬於Queue接口,但是他們都是有區別的, 因為他們會接口到其他種類的隊列中.所以有必要了解一下線區別:
offer,add 區別:
一些隊列有大小限制,因此如果想在一個滿的隊列中加入一個新項,多出的項就會被拒絕。
這時新的 offer 方法就可以起作用了。它不是對調用 add() 方法拋出一個 unchecked 異常,而只是得到由 offer() 返回的 false。
poll,remove 區別:
remove() 和 poll() 方法都是從隊列中刪除第一個元素。remove() 的行為與 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合調用時不是拋出異常,只是返回 null。因此新的方法更適合容易出現異常條件的情況。
peek,element區別:
element() 和 peek() 用於在隊列的頭部查詢元素。與 remove() 方法類似,在隊列為空時, element() 拋出一個異常,而 peek() 返回 null。