本文首發於cartoon的博客
轉載請注明出處:https://cartoonyu.github.io/cartoon-blog
這段時間把瘋狂JAVA再看了一遍,發現Stack,ArrayDeque,LinkedList都可以作為棧使用,所以就稍微從性能以及實現的細節對比這三者的區別。
類繼承樹

區別
底層數據存儲方式
| 存儲方式 | |
|---|---|
| Stack | 長度為10的數組 |
| ArrayDeque | 長度為16的數組 |
| LinkedList | 鏈表 |
方法參照表
| Stack | ArrayDeque | LinkedList |
|---|---|---|
| push(e) | addFirst(e)/offerFirst(e) | addFirst(e)/offerFirst(e) |
| pop() | removeFirst()/pollFirst() | removeFirst()/pollFirst() |
| peek() | getFirst()/peekFirst() | getFirst()/peekFirst() |
線程安全
| 線程安全 | |
|---|---|
| Stack | 線程同步 |
| ArrayDeque | 線程不同步 |
| LinkedList | 線程不同步 |
性能選項
通常情況下,不推薦使用Vector以及其子類Stack
1.需要線程同步
使用Collections工具類中synchronizedXxx()將線程不同步的ArrayDeque以及LinkedList轉換成線程同步。
