這段時間把瘋狂JAVA再看了一遍,發現Stack,ArrayDeque,LinkedList均可以做爲棧使用,因此就稍微從性能以及實現的細節對比這三者的區別。數組
由繼承樹看出,三者都是Collection的間接實現類。
ArrayDeque實現Deque接口,Stack繼承於Vector,LinkedList實現Deque與List接口。
安全
存儲方式 | |
---|---|
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工具
使用Collections工具類中synchronizedXxx()將線程不一樣步的ArrayDeque以及LinkedList轉換成線程同步。性能