隊列和棧
Queue
隊列(Queue)是常用的數據結構,可以將隊列看成特殊的線性表,隊列限制了對線性表的訪問方式,只能從線性表的一端添加(offer)元素,從另一端取出(poll)元素。
隊列遵循先進先出(FIFO first input First Output)原則。
JDK中提供了Queue接口,同時使得LinkedList實現了該接口(選擇LinkedList實現Queue的原因在於Queue經常要進行插入和刪除的操作,而LinkedList在這方面效率較高)。
Queue提供了操作隊列的相關方法:
1. boolean offer(E e):將元素追加到隊列末尾,若添加成功則返回true。
2. E poll():從隊首刪除並返回該元素;
3. E peek():返回隊首元素,但是不刪除。
Deque
Deque是Queue的子接口,定義了所謂的“雙端隊列”即從隊列的兩端分別可以入隊(offer)和出隊(poll),LinkedList實現了該接口。
如果將Deque限制爲只能從一端入隊和出隊,則可實現“棧”(Stack)的數據結構,對於棧而言,入棧稱之爲push,出棧稱之爲pop。
棧遵循先進後出(FILO First input Last Oytput)的原則。
Deque提供了操作棧的相關方法,其中主要方法如下:
1. void push(E e):將給定元素“壓入”棧中,存入的元素會在棧首,即:棧的第一個元素。
2. E pop():將棧首元素刪除並返回。