Java學習五分鐘系列:對比Vector、ArrayList、LinkedList

Java學習五分鐘系列,目的是為讓大家在短時間內搞清楚一項技術的概念、優缺點和適用場景,想要深入的瞭解,還需要投入更多的時間。

Java的集合類,值得我們深入的學習,建議大家有時間的話,可以閱讀一下源碼;並且可以對比一下每個JDK版本中,集合類源碼的變化。

今天我帶大家簡單對比一下Vector、ArrayList、LinkedList。

相同之處

三者都實現了集合框架中的 List接口,它們都是【有序集合】。

它們有些功能也比較相似,例如都提供了按照位置進行查詢、新增或者刪除,提供了迭代器以遍歷其內容等。

Java學習五分鐘系列:對比Vector、ArrayList、LinkedList

不同之處

  • Vector :是基於數組實現的,可以根據需要自動擴展容量,當數組滿了,會創建新的數組,並Copy原來的數據到新的數組。Vector是線程安全的,如果不考慮線程安全問題,建議不要使用。
  • ArrayList:也是基於數組實現的,也可以動態地調整容量,和Vector不同的是,Vector擴容的時候翻倍,ArrayList則是(默認)增加50%。ArrayList不是線程安全的,所以性能要高。
  • LinkedList:顧名思義,雙向鏈表,不需要像Vector、ArrayList那樣調整容量;LinkedList也不是線程安全的。
Java學習五分鐘系列:對比Vector、ArrayList、LinkedList

優缺點及適用場景

  • Vector和ArrayList本質都是動態數組,所以各個元素都是按照順序存儲的,所以很適合隨機訪問的場景,可以快速的定位到某一個元素。但是在插入和刪除的時候,除非是尾部元素,在操作其他元素的時候,性能往往很差(因為要移動其他元素);
  • LinkedList在插入和刪除時,效率很高,但是隨機訪問的性能會比Vector和ArrayList差;
  • 所以在開發過程中,要根據場景選擇使用,操作是偏向於查詢,還是偏向於修改和刪除;是否要求線程安全。
Java學習五分鐘系列:對比Vector、ArrayList、LinkedList

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。

Java學習五分鐘系列:對比Vector、ArrayList、LinkedList



分享到:


相關文章: