Java 中幾個常見的線性數據結構的 方法總結與對比,包括:
List
(ArrayList
、LinkedList
)Queue
(LinkedList
、PriorityQueue
)Deque
(ArrayDeque
、LinkedList
)Stack
(傳統Stack
類,和推薦的Deque
實現)
一、接口/類總覽
接口/類 | 常見實現類 | 特點 |
---|---|---|
List<E> | ArrayList , LinkedList | 有序、可重復、索引訪問 |
Queue<E> | LinkedList , PriorityQueue | FIFO 隊列 |
Deque<E> | LinkedList , ArrayDeque | 雙端隊列,支持棧和隊列 |
Stack<E> | Stack (繼承 Vector ) | LIFO 棧(已不推薦) |
二、常用方法對比
方法名 | List | Queue | Deque | Stack |
---|---|---|---|---|
add(E) | ? 尾部添加 | ? 尾部添加 | ? 尾部添加 | ? 尾部添加 |
add(int, E) | ? 指定位置插入 | ? | ? | ? |
addFirst(E) | ?(ArrayList) ?(LinkedList) | ? | ? | ? |
addLast(E) | ?(ArrayList) ?(LinkedList) | ? | ? | ? |
offer(E) | ? | ?(添加) | ? | ? |
offerFirst(E) | ? | ? | ? | ? |
offerLast(E) | ? | ? | ? | ? |
get(int) | ? | ? | ? | ?(search用) |
remove() | ? | ?(移除隊首) | ?(移除隊首) | ?(移除棧頂) |
poll() | ? | ?(移除隊首) | ? | ? |
pollFirst() | ? | ? | ? | ? |
pollLast() | ? | ? | ? | ? |
peek() | ? | ?(查看隊首) | ? | ?(查看棧頂) |
peekFirst() | ? | ? | ? | ? |
peekLast() | ? | ? | ? | ? |
pop() | ? | ? | ?(從頭) | ? |
push(E) | ? | ? | ?(加頭) | ? |
isEmpty() | ? | ? | ? | ? |
clear() | ? | ? | ? | ? |
contains(E) | ? | ? | ? | ? |
size() | ? | ? | ? | ? |
三、隊列和棧的實現
//隊列
Queue<Integer> queue = new LinkedList<>();
//deque實現隊列
Deque<Integer>queue = new ArrayDeque<>();
//棧
Stack<Integer>stack = new Stack<>();
//deque實現棧
Deque<Integer>stack = new ArrayDeque<>();
四、LinkedList
和 ArrayList
底層結構對比
特性 | ArrayList | LinkedList |
---|---|---|
底層結構 | 動態數組(連續內存) | 雙向鏈表(非連續內存) |
查詢效率 | ? O(1) 直接索引 | ? O(n) 從頭/尾遍歷 |
插入效率(中間) | ? O(n)(需要移動元素) | ? O(1)(節點引用調整) |
插入效率(尾部) | ? 攤銷 O(1) | ? O(1) |
刪除效率(中間) | ? O(n) | ? O(1)(已定位) |
內存使用 | 少(僅數據) | 多(每個節點額外兩個指針) |
? 增刪頻繁用
LinkedList
,查詢頻繁用ArrayList
。