LinkedList、ArrayList、Vector三者的關系與區別?


LinkedList、ArrayList、Vector三者的關系與區別?

 

區分ArrayList,Vector,LinkedList的區別
ArrayList,Vector的區別:
1.出現版本:
ArrayList(1.2),Vector(1.0),Collection(1.2),也就是說Vector出現的更早(老版本的動態數組,與HashTable一樣在jdk1.0)
Vector:elementData,當執行構造方法時候初始化大小為10
ArrayList:調用無參構造(elementData),初始化大小為空

2.初始化策略區別:
Vector在調用無參構造執行后將對象數組初始化為10
ArrayList采用懶加載策略,在構造方法階段並不初始化對象數組,在第一次添加元素的時候才初始化對象數組(add方法)

3.擴容策略:
ArrayList擴容的時候,新數組大小變為原數組大小的1.5倍
Vector擴容的時候,新數組大小變為原數組的2倍

4.線程安全性:
ArrayList采用異步處理,線程不安全,效率較高
Vector采用在方法上加鎖,線程安全,效率較高(即便要使用線程安全的List,也不要用Vector)

5.遍歷:
Vector支持較老的迭代器Enumeration
ArrayList不支持



ArrayList,Vector的共同點;
底層均使用數組實現

ArrayList,LinkedList:
LinkedList底層采用雙向鏈表實現,所以不存在擴容,初始化問題,並且add方法沒有加鎖,所以它和ArrayList一樣同為異步實現
ArrayList底層采用數組實現

 

 

 

a、LinkedList、ArrayList、Vector都是List接口的字類,其中LinkedList基於雙向鏈表實現,ArrayList和Vector基於數組實現

b、ArrayList采用懶加載模式,在第一次添加元素的時候,初始化內部數組,初始大小為10,擴容大俠為原先為1.5倍,采用異步處理,線程不安全,性能較高,在80%的場景下應用

c、Vector在產生對象時候初始化大小為10的內部數組、擴容為原先的2倍,采用synchronized修飾常用的增刪查改方法,線程安全,性能較低(讀讀互斥)

Stack是Vector的子類

d、常見的插入刪除在尾部ArrayList比較快,在指定位置的時候,LinkedList比較快,在任意位置的插入與刪除會考慮使用LinkedList(因為LInkedList是鏈表,指定位置快,而ArrayList需要將插入元素以后的元素整體向后挪動)

 

額外備注:

LinkedList實現Deque接口,Deque接口繼承Queue,所以,LinkedList也實現了Queue接口

ArrayList繼承AbastactList

Arrays.copyOf() , Arrays.sort() , Arrays.aslist


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM