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