面試題:ArrayList、LinkedList、Vector三者的異同?

面試題:ArrayList、LinkedList、Vector三者的異同?

 

 

 

同:三個類都是實現了List介面(Collection的子介面之一),存儲數據的特點相同:存儲有序的、可重複的數據

不同:
*              |----ArrayList:作為List介面的主要實現類;執行緒不安全的,效率高;底層使用Object[] elementData存儲
* |----LinkedList:對於頻繁的插入、刪除操作,使用此類效率比ArrayList高;底層使用【雙向鏈表】存儲
* |----Vector:作為List介面的古老實現類;執行緒安全的,效率低;底層使用Object[] elementData存儲

雙向鏈表增刪的示意圖:

 

 

 

 

面試題:
請問ArrayList/LinkedList/Vector的異同?談談你的理解?ArrayList底層
是什麼?擴容機制?Vector和ArrayList的最大區別?
 ArrayList和LinkedList的異同
二者都執行緒不安全,相對執行緒安全的Vector,執行效率高。
此外,ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。對於
隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。對於新增
和刪除操作add(特指插入)和remove,LinkedList比較佔優勢,因為ArrayList要移動數據。
 ArrayList和Vector的區別
Vector和ArrayList幾乎是完全相同的,唯一的區別在於Vector是同步類(synchronized),屬於
強同步類。因此開銷就比ArrayList要大,訪問要慢。正常情況下,大多數的Java程式設計師使用
ArrayList而不是Vector,因為同步完全可以由程式設計師自己來控制。Vector每次擴容請求其大
小的2倍空間,而ArrayList是1.5倍。Vector還有一個子類Stack。

 

Tags: