Stack,ArrayDeque,LinkedList的區別

       這段時間把瘋狂JAVA再看了一遍,發現Stack,ArrayDeque,LinkedList均可以做爲棧使用,因此就稍微從性能以及實現的細節對比這三者的區別。數組

類繼承樹

Collection繼承樹
       由繼承樹看出,三者都是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工具

1.須要線程同步

    使用Collections工具類中synchronizedXxx()將線程不一樣步的ArrayDeque以及LinkedList轉換成線程同步。性能

2.頻繁的插入、刪除操做:LinkedList

3.頻繁的隨機訪問操做:ArrayDeque

4.未知的初始數據量:LinkedList

相關文章
相關標籤/搜索