隊列(queue),先進先出(First in first out,FIFO)。
堆棧(stack),后進先出(Last in first out,LIFO)。
Java中有Stack這個類,但是不推薦使用。通常使用Deque來完成隊列和堆棧的功能。
Deque是一個線性表接口,可以兩端進行元素的插入和刪除。Deque是“Double ended Queue”的縮寫,Deque讀音[dɛk] 。使用Deque接口提供的方法就可以完成隊列“先進先出”和堆棧“后進先出”的功能:
| 隊列 |
offer(E e) --- 向隊列尾加入元素 E poll() --- 獲取隊列頭部元素,並從隊列中刪去 |
| 堆棧 |
push(E e) --- 向堆棧中壓入元素 E pop() --- 獲取棧頂元素,並從堆棧中刪除 |
Deque是個接口,其實現類有:
- ArrayDeque,使用“數組”存儲數據
- LinkedList,使用“鏈表”存儲數據
- ConcurrentLinkedDeque,線程安全的LinkedList
數據檢索多的用ArrayDeque;數據需要頻繁插入、更新,則用LinkedList;多線程操作使用ConcurrentLinkedDeque。
代碼示例:
1: Deque<String> queue = new LinkedList<String>();
2: queue.offer("data1"); //隊列尾部加入元素
3: queue.offer("data2");
4: queue.offer("data3");
5: System.out.println(queue.poll()); //取得隊首元素,並從隊列中刪去
6:
7: Deque<String> stack = new LinkedList<String>();
8: stack.push("element1"); //向棧頂壓入元素
9: stack.push("element2");
10: stack.push("element3");
11: System.out.println(queue.pop()); //取得棧頂元素,並從棧頂刪去
