類集常考面試題(ArrayList、Vector、LinkedList的區別)

ArrayList、Vector和LinkedList有什麼區別

ArrayList、Vector、LinkedList類均在java.uti包中,均爲可伸縮數組,即可以動態改變長度的數組。
ArrayList和Vector都是基於存儲元素的Object[] array來實現的,它們會在內存中開闢一塊連續的空間來存儲,由於數組存儲是連續的,因此,它們支持用序號(下標)來訪問元素,同時索引數據的速度比較快
但是在插入元素時需要移動容器裏面的元素,所以對數據的插入操作執行得比較慢。ArrayList和Vector都有一個初始化的容量大小,當裏面存儲的元素超過這個大小時就要動態的擴充他們的存儲空間。爲了提高效率,每次擴充容量,不是簡單的擴充一個存儲單元,而是一次性增加多個存儲單元。Vector每次擴充爲原來的兩倍(擴充大小是可以自己設置得),而我們的ArrayList默認擴充爲原來的1.5倍(沒有提供方法來設置空間擴充的方法)
ArrayList與Vector最大的區別就是synchronization(同步)的使用,沒有一個ArrayList的方法是同步的,而Vector的絕大部分方法都是同步的例如(add、insert、remove、set、equals、hashcode等)都是直接或者是間接的同步的。所以Vector是線程安全的,ArrayList不是線程安全的。正是由於Vector提供了線程安全機制,其性能上也會略遜於ArrayList。
LinkedList是採用雙向列表來實現的,對數據的索引需要從列表頭開始遍歷,因此用於隨機訪問效率比較低,但是插入元素不需要對數據進行移動,因此插入的效率比較高。同時,LinkedList是非線程安全的容器。
那麼我們在實際的使用過程中,如何從這幾種容器中選擇適合的進行使用呢?
當對於數據的主要操作位索引或者只是在末端的位置插入或者是刪除操作時,使用ArrayList或者Vector的效率比較高;當多線程中使用容器時(即多個線程會同時訪問該容器時),選用Vector較爲安全。

敲黑板

ArrayList

1、數組
2、線程不安全
3、每次擴容爲原來的1.5倍
4、不可以設置空間擴容方法

Vector

1、數組
2、線程安全
3、每次擴容爲原來的2倍
4、可以設置空間擴容方法

LinkList

1、雙向鏈表
2、隨機訪問效率較低,隨即插入效率高。

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