首頁常見問題正文

Arraylist、Vector和LinkedList有什么區(qū)別?

更新時間:2023-02-22 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  Arraylist、Vector和LinkedList類均在java.util包中,均為可伸縮數(shù)組,即可以動態(tài)改變長度的數(shù)組。

  ArrayList和Vector都是基于存儲元素的Object[]array來實現(xiàn)的,它們會在內(nèi)存中開辟一塊連續(xù)的空間來存儲,由于數(shù)據(jù)存儲是連續(xù)的,因此,它們支持用序號(下標(biāo))來訪問元素,同時索引的數(shù)據(jù)比較快。但是在插入元素時候需要移動容器中的元素,所以對數(shù)據(jù)的插入操作執(zhí)行得比較慢。ArrayList和Vector都有一個初始化的容量的大小,當(dāng)里面存儲的元素超過這個大小時就需要動態(tài)地擴充它們的存儲空間。為了提高程序的效率,每次擴充容量,不是簡單地擴充一個存儲單元,而是一次增加多個存儲單元。Vector默認擴充為原來的1.5倍(沒有提供方法來設(shè)置空間的擴充的方法)。

  ArrayList和Vector最大的區(qū)別就是synchronization(同步)的使用,沒有一個ArrayList的方法是同步的,而Vector的絕大多數(shù)方法(例如add、insert、remove、set、equals、hashcode等)都是直接或者間接同步的,所以Vector是線程安全的,ArrayList不是線程安全的。正是由于Vector提供了線程安全的機制,其性能上也要略遜于ArrayList。

  LinkedList是采用雙向列表來實現(xiàn)的,對數(shù)據(jù)的索引需要從列表頭開始遍歷,因此用于隨機訪問則效率比較低,但是插入元素時不需要對數(shù)據(jù)進行移動,因此插入效率比較高。同時,LinkedList是非線程安全的容器。

  那么,在實際使用時候,如何從這幾種容器中選擇合適的使用呢?當(dāng)對數(shù)據(jù)的主要操作或者索引只在集合的末端增加、刪除元素時,使用ArrayList或Vector效率比較高;當(dāng)對數(shù)據(jù)的操作主要為指定位置的插入或刪除操作時,使用LinkedList效率比較高;當(dāng)在線程中使用容器時(即多個線程會同時訪問該容器),選用Vector比較為安全。

下面是黑馬程序員公開的幾套Java課程,您可以下載和在線觀看學(xué)習(xí),如果想深入學(xué)習(xí)java并想找到不錯的java開發(fā)相關(guān)工作,建議報班學(xué)習(xí)黑馬程序員Java高級軟件工程師課程。獲取【Java視頻教程+資料】加播妞1605146928606_課程資料.jpg:2217622915。


分享到:
在線咨詢 我要報名
和我們在線交談!