第八章、Vector,ArrayList, LinkedList的區(qū)別

一、ArrayList

ArrayList是一個可以處理變長數(shù)組的類型,這里不局限于“數(shù)”組,ArrayList是一個泛型類,可以存放任意類型的對象。顧名思義,ArrayList是一個數(shù)組列表,因此其內部是使用一個數(shù)組來存放對象的,因為Object是一切類型的父類,因而ArrayList內部是有一個Object類型的數(shù)組類存放對象。

ArrayList類常用的方法有add()、clear()、get()、indexOf()、remove()、sort()、toArray()、toString()等等,同時ArrayList內部有一個私有類實現(xiàn)Iterator接口,因此可以使用iterator()方法得到ArrayList的迭代器,同時,還有一個私有類實現(xiàn)了ListIterator接口,因此ArrayList也可以調用listIterator()方法得到ListIterator迭代器。

由于ArrayList是依靠數(shù)組來存放對象的,只不過封裝起來了而已,因此其一些查找方法的效率都是O(n),跟普通的數(shù)組效率差不多,只不過這個ArrayList是一個可變”數(shù)組“,并且可以存放一切指定的對象。

另外,由于ArrayList的所有方法都是默認在單一線程下進行的,因此ArrayList不具有線程安全性。若想在多線程下使用,應該使用Colletions類中的靜態(tài)方法synchronizedList()對ArrayList進行調用即可。

二、LinkedList

LinkedList可以看做為一個雙向鏈表,所有的操作都可以認為是一個雙向鏈表的操作,因為它實現(xiàn)了Deque接口和List接口。同樣,LinkedList也是線程不安全的,如果在并發(fā)環(huán)境下使用它,同樣用Colletions類中的靜態(tài)方法synchronizedList()對LinkedList進行調用即可。

在LinkedList的內部實現(xiàn)中,并不是用普通的數(shù)組來存放數(shù)據(jù)的,而是使用結點<Node>來存放數(shù)據(jù)的,有一個指向鏈表頭的結點first和一個指向鏈表尾的結點last。不同于ArrayList只能在數(shù)組末尾添加數(shù)據(jù),LinkList可以很方便在鏈表頭或者鏈表尾插入數(shù)據(jù),或者在指定結點前后插入數(shù)據(jù),還提供了取走鏈表頭或鏈表尾的結點,或取走中間某個結點,還可以查詢某個結點是否存在。add()方法默認在鏈表尾部插入數(shù)據(jù)??傊?,LinkedList提供了大量方便的操作方法,并且它的插入或增加等方法的效率明顯高于ArrayList類型,但是查詢的效率要低一點,因為它是一個雙向鏈表。

因此,LinkedList與ArrayList最大的區(qū)別是LinkedList更加靈活,并且部分方法的效率比ArrayList對應方法的效率要高很多,對于數(shù)據(jù)頻繁出入的情況下,并且要求操作要足夠靈活,建議使用LinkedList;對于數(shù)組變動不大,主要是用來查詢的情況下,可以使用ArrayList。

三、Vector

Vector也是一個類似于ArrayList的可變長度的數(shù)組類型,它的內部也是使用數(shù)組來存放數(shù)據(jù)對象的。值得注意的是Vector與ArrayList唯一的區(qū)別是,Vector是線程安全的,即它的大部分方法都包含有關鍵字synchronized,因此,若對于單一線程的應用來說,最好使用ArrayList代替Vector,因為這樣效率會快很多(類似的情況有StringBuffer與StringBuilder);而在多線程程序中,為了保證數(shù)據(jù)的同步和一致性,可以使用Vector代替ArrayList實現(xiàn)同樣的功能。



1、Vector、ArrayList都是以類似數(shù)組的形式存儲在內存中,LinkedList則以鏈表的形式進行存儲。

2、List中的元素有序、允許有重復的元素,Set中的元素無序、不允許有重復元素。

3、Vector線程同步,ArrayList、LinkedList線程不同步。

4、LinkedList適合指定位置插入、刪除操作,不適合查找;ArrayList、Vector適合查找,不適合指定位置的插入、刪除操作。

5、ArrayList在元素填滿容器時會自動擴充容器大小的50%,而Vector則是100%,因此ArrayList更節(jié)省空間。


Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap


總結

,這三者都是實現(xiàn)集合框架中的LIst,也就是所謂的有序集合,因此具體功能也比較近似,比如都提供按照位置進行定位、添加或者刪除的操作,都提供迭代器遍歷其內容等。但因為具體的設計區(qū)別,在行為、性能、線程安全等方面,表現(xiàn)又有很大不同。


集合框架


集合特性1


集合特性2
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容