本文首發於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轉換成線程同步。