ArrayList、Vector 和 LinkedList 有什麼區別

ArrayList、Vecotr、LinkedList 類均爲 java.util 包中,均爲可伸縮數據,既可以動態改變長度的數組。都是 list 接口的實現類;

【1】ArrayList 和 Vector都是基於存儲的 Object[] array 來實現的,它們會在內存中開闢一塊連續的空間來存儲(默認是10數組大小的內存),由於數據存儲是連續的,因此,它們支持用序號(下標)來訪問元素,同時索引數據的速度比較快。但是在插入/刪除元素時需要移動容器中的元素,所以對數據的插入/刪除操作執行比較慢。ArrayList 和 Vector都是一個初始化的容量的大小,當存儲的元素超過分配內存大小時就需要動態地擴展它們的存儲空間(會重新創建一個新的數組,將舊的數據複製過去)。爲了提高效率,每次擴充容量時,不是簡單的擴充一個存儲單位,而是一次增加多個存儲單元,Vector 默認擴充爲原來的2倍(每次擴充的大小是可以設置的),而 ArrayList 默認擴充1.5倍(沒有提供方法來設置空間擴充大小)。
【2】ArrayList 與 Vector最大的區別就是 synchronization(同步)的使用,沒有一個 ArrayList的方法是同步,而 Vector的絕大數方法(add、insert、remove、set、equals、hashcode等)都是直接或者間接同步的,所以 Vector是線程安全的,ArrayList 不是線程安全的。正是由於 Vector是線程安全的,所以性能上也略遜於 ArrayList。
【3】LinkedList 是採用雙向鏈表來實現的,對數據的索引需要從列表頭開始遍歷,因此用於隨機訪問效率比較低,但是插入元素時不需要對數據進行移動,因此插入效率高。同時 LinkedList是非線程安全的容器。
【4】那麼,在實際使用時,當對數據主要操作爲索引或只是集合的未端增加、刪除元素時,使用 ArralyList或 Vector效率比較高;當對數據的操作主要是指位置的插入或者刪除操作時,使用 LinkedList效率比較高;當在線程中使用容器時(既多線程同時訪問該容器),選用 Vector較爲安全。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章