面試刷題8:Vector ArrayList LinkedList區別?


面試刷題8:Vector ArrayList LinkedList區別?


高效的管理和操作數據(數據結構)是非常重要的,java提供了對應的集合框架。
我是李福春,我在準備面試,今天的問題是:
Vector,ArrayList,LinkedList有什麼區別?
這3個貨都是List的直接子類或者間接子類,實現的是順序集合,都提供了add,delete,index,遍歷等操作。
區別是:
Vector是線程安全的,性能略差,自動擴容按照1倍擴容,適合按照順序檢索的場景;
ArrayLIst是非線程安全的,性能高,擴容基數0.5, 適合按照順序檢索的場景;
LinkedList是雙向鏈表,是非線程安全的,性能高,不存在擴容,適合增加,刪除的場景

Java的集合體系


面試刷題8:Vector ArrayList LinkedList區別?


Map沒有繼承Collection,不歸納如集合體系;
一些集合的實現是依賴於map來實現的;
比如TreeSet, 底層是 TreeMap , 只使用了key; 它是有序的,查詢時間複雜度是常數級別,增加,刪除,包含操作時間複雜度是log(n)
HashSet底層實現是HashMap , 它是無順序的,增刪包含操作是常數級別的時間複雜度,但是不宜設置過大的容量;
以上的集合除了Vector都是線程非安全的。

集合的算法


主要說默認的排序算法,Arrays.sort(T[])
當傳入原始類型,使用的是雙軸快速排序;
當傳入對象類型,使用的是歸併和二分插入綜合的排序;
java8提供了stream,集合也支持並行排序。可以充分發揮多核心的計算能力。

Java8對集合的改進


基於接口的defalut方法,擴展了現有集合,可以輕鬆的Stream化;

小結


本篇先說明了ArrayList,LinkedList,Vector的相同點,再從線程安全,底層結構,擴容,性能,適用場景做了區別對比。
在擴展回顧了java的Collection體系包含的容器,特別之處了TreeSet,HashSet的底層實現馬甲。
在簡單說了一下集合的默認排序算法和並行排序算法,以及集合在java8中的Stream化。

面試刷題8:Vector ArrayList LinkedList區別?


分享到:


相關文章: