更新時間:2023-02-22 來源:黑馬程序員 瀏覽量:
Arraylist、Vector和LinkedList類均在java.util包中,均為可伸縮數組,即可以動態改變長度的數組。
ArrayList和Vector都是基于存儲元素的Object[]array來實現的,它們會在內存中開辟一塊連續的空間來存儲,由于數據存儲是連續的,因此,它們支持用序號(下標)來訪問元素,同時索引的數據比較快。但是在插入元素時候需要移動容器中的元素,所以對數據的插入操作執行得比較慢。ArrayList和Vector都有一個初始化的容量的大小,當里面存儲的元素超過這個大小時就需要動態地擴充它們的存儲空間。為了提高程序的效率,每次擴充容量,不是簡單地擴充一個存儲單元,而是一次增加多個存儲單元。Vector默認擴充為原來的1.5倍(沒有提供方法來設置空間的擴充的方法)。
ArrayList和Vector最大的區別就是synchronization(同步)的使用,沒有一個ArrayList的方法是同步的,而Vector的絕大多數方法(例如add、insert、remove、set、equals、hashcode等)都是直接或者間接同步的,所以Vector是線程安全的,ArrayList不是線程安全的。正是由于Vector提供了線程安全的機制,其性能上也要略遜于ArrayList。
LinkedList是采用雙向列表來實現的,對數據的索引需要從列表頭開始遍歷,因此用于隨機訪問則效率比較低,但是插入元素時不需要對數據進行移動,因此插入效率比較高。同時,LinkedList是非線程安全的容器。
那么,在實際使用時候,如何從這幾種容器中選擇合適的使用呢?當對數據的主要操作或者索引只在集合的末端增加、刪除元素時,使用ArrayList或Vector效率比較高;當對數據的操作主要為指定位置的插入或刪除操作時,使用LinkedList效率比較高;當在線程中使用容器時(即多個線程會同時訪問該容器),選用Vector比較為安全。
下面是黑馬程序員公開的幾套Java課程,您可以下載和在線觀看學習,如果想深入學習java并想找到不錯的java開發相關工作,建議報班學習黑馬程序員Java高級軟件工程師課程。獲取【Java視頻教程+資料】加播妞:2217622915。