1. 程式人生 > >ArrayList、LinkedList與Vector的對比

ArrayList、LinkedList與Vector的對比

最佳實踐 都是 更多 訪問 blog AR 一個數 ali alt

1. List概述

List,就如圖名字所示一樣,是元素的有序列表。當我們討論List時,將其與Set作對比是一個很好的辦法,Set集合中的元素是無序且唯一的。
下圖是Collection的類繼承圖,從圖中你可以對本文所討論的知識有大致的了解.

技術分享圖片 圖1

2. ArrayList、LinkedList與Vector的對比
從圖中可以看出,這三者都實現了List 接口.所有使用方式也很相似,主要區別在於因為實現方式的不同,所以對不同的操作具有不同的效率。
ArrayList 是一個可改變大小的數組.當更多的元素加入到ArrayList中時,其大小將會動態地增長.內部的元素可以直接通過get與set方法進行訪問,因為ArrayList本質上就是一個數組.
LinkedList 是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能.但在get與set方面弱於ArrayList.
當然,這些對比都是指數據量很大或者操作很頻繁的情況下的對比,如果數據和運算量很小,那麽對比將失去意義.
Vector 和ArrayList類似,但屬於強同步類。如果你的程序本身是線程安全的(thread-safe,沒有在多個線程之間共享同一個集合/對象),那麽使用ArrayList是更好的選擇。
Vector和ArrayList在更多元素添加進來時會請求更大的空間。Vector每次請求其大小的雙倍空間,而ArrayList每次對size增長50%.
而 LinkedList 還實現了 Queue 接口,該接口比List提供了更多的方法,包括 offer(),peek(),poll()等.
註意: 默認情況下ArrayList的初始容量非常小,所以如果可以預估數據量的話,分配一個較大的初始值屬於最佳實踐,這樣可以減少調整大小的開銷。

ArrayList、LinkedList與Vector的對比