Java: ArrayList、LinkedList、Vector
阿新 • • 發佈:2018-12-25
ArrayList、LinkedList、Vector都實現了List的介面。
ArrayList
List 介面的大小可變陣列的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 List 介面外,此類還提供一些方法來操作內部用來儲存列表的陣列的大小。(此類大致上等同於 Vector 類,除了此類是不同步的。)
每個 ArrayList 例項都有一個容量。該容量是指用來儲存列表元素的陣列的大小。它總是至少等於列表的大小。隨著向 ArrayList 中不斷新增元素,其容量也自動增長。
LinkedList
List 介面的連結列表實現。實現所有可選的列表操作,並且允許所有元素(包括 null
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 是提供了對集合進行操作的強大方法的工具類 ,它包含有各種有關集合操作的靜態多型方法。此類不能例項化