Java中實際上提供了java.util.Stack來實現棧結構,但官方目前已不推薦使用,而是使用java.util.Deque雙端隊列來實現隊列與棧的各種需求.如下圖所示java.util.Deque的實現子類有java.util.LinkedList和java.util.ArrayDeque.顧名思義前者是基於鏈表,后者基於數據實現的雙端隊列.
要講棧和隊列,首先要講Deque接口。Deque的含義是“double ended queue”,即雙端隊列,它既可以當作棧使用,也可以當作隊列使用。下表列出了Deque與Queue相對應的接口:
下表列出了Deque與Stack對應的接口:
(轉載自)[https://blog.csdn.net/u013967628/article/details/85210036]
ArrayDeque與LinkedList
ArrayDeque與LinkedList都實現了Deque接口,其都是線程不安全的,當我們需要線程同步時,可以使用Collections工具類中synchronizedXxx()將線程不同步的ArrayDeque以及LinkedList轉換成線程同步。
區別:
1.底層數據結構不同,ArrayDeque是基於數組,LinkedList是基於鏈表,ArrayDeque默認長度為16,當容量不夠需要擴容(兩倍),其擴容很費時間(需要復制原數組到新數組)。所以未知數據量,盡量使用LinkedList
2.ArrayDeque適合頻繁訪問,LinkedList適合頻繁刪除