1. 程式人生 > >Java: ArrayList、LinkedList、Vector

Java: ArrayList、LinkedList、Vector

這裡寫圖片描述

ArrayList、LinkedList、Vector都實現了List的介面。

ArrayList

List 介面的大小可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 List 介面外,此類還提供一些方法來操作內部用來儲存列表的陣列的大小。(此類大致上等同於 Vector 類,除了此類是不同步的。)

每個 ArrayList 例項都有一個容量。該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列表的大小。隨著向 ArrayList 中不斷新增元素,其容量也自動增長。

LinkedList

List 介面的連結列表實現。實現所有可選的列表操作,並且允許所有元素(包括 null

)。除了實現 List 介面外,LinkedList 類還為在列表的開頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。這些操作允許將連結列表用作堆疊、佇列或雙端佇列。注意,此實現不是同步的

Vector

Vector 類可以實現可增長的物件陣列。與陣列一樣,它包含可以使用整數索引進行訪問的元件。但是,Vector 的大小可以根據需要增大或縮小,以適應建立 Vector 後進行新增或移除項的操作。Vector 是同步的

區別

  • ArrayList 本質上是一個可改變大小的陣列.

    • 當元素加入時,其大小將會動態地增長.
    • 內部的元素可以直接通過get與set方法進行訪問.元素順序儲存 ,隨機訪問很快
    • 刪除非頭尾元素慢,新增元素慢而且費資源 ,較適用於無頻繁增刪的情況 ,比陣列效率低,如果不是需要可變陣列,可考慮使用陣列
    • 非執行緒安全.
  • LinkedList 是一個雙鏈表

    • 在新增和刪除元素時具有比ArrayList更好的效能.但在get與set方面弱於ArrayList.
    • 隨機訪問很慢,增刪操作很快,不耗費多餘資源 ,允許null元素
    • 適用於 :沒有大規模的隨機讀取,大量的增加/刪除操作
    • 非執行緒安全.
  • Vector (類似於ArrayList)但其是同步的開銷就比ArrayList要大。如果你的程式本身是執行緒安全的,那麼使用ArrayList是更好的選擇。 Vector和ArrayList在更多元素新增進來時會請求更大的空間。Vector每次請求其大小的雙倍空間,而ArrayList每次對size增長50%.

彩蛋:Collection與Collections區別:

  • Collection是集合繼承結構中的頂層介面
  • Collections 是提供了對集合進行操作的強大方法的工具類 ,它包含有各種有關集合操作的靜態多型方法。此類不能例項化