Vector/Arraylist/LinkedList

一. ArrayList 與 LinkedList 區別
ArrayList 和 LinkedList 都實現了 List 接口, 他們有以下的不同點:
ArrayList 是基於索引的數據接口, 它的底層是數組。 它可以以 O(1)時間複雜度對元素進行隨機訪問。 與此對應, LinkedList 是以元素列表的形式存儲它的數據, 每一個元素都和它的前一個和後一個元素鏈接在一起, 在這種情況下, 查找某個元素的時間複雜度是 O(n)。
相對於 ArrayList, LinkedList 的插入, 添加, 刪除操作速度更快, 因爲當元素被添加到集合任意位置的時候, 不需要像數組那樣重新計算大小或者是更新索引。LinkedList 比 ArrayList 更佔內存, 因爲 LinkedList 爲每一個節點存儲了兩個引用, 一個指向前一個元素, 一個指向下一個元素。
二. Vetor arraylist Linkedlist 區別
ArrayList 就是動態數組, 是 Array 的複雜版本, 動態的增加和減少元素.當更多的元素加入到 ArrayList 中時,其大小將會動態地增長。 它的元素可以通過 get/set 方法直接訪問,因爲 ArrayList 本質上是一個數組。 初始容量爲 10。 1.插入元素的時候可能擴容,刪除元素時不會縮小容量。2.擴容增長爲 Arraylist 增長原來的 0.5 倍 3. 而 Arraylist 沒有設置增長空間
的方法。 4.線程不同步Vector 和 ArrayList 類似, 區別在於 Vector 是同步類(synchronized).因此,開銷就比ArrayList 要大。 初始容量爲 10。 實現了隨機訪問接口, 可以隨機訪問。

Vector 是內部是以動態數組的形式來存儲數據的。 1.Vector 還可以設置增長的空間大小, 2. 及 Vector 增長原來的 1 倍 3.vector 線程同步

LinkedList 是一個雙鏈表,在添加和刪除元素時具有比 ArrayList 更好的性能.但在 get與 set 方面弱於 ArrayList.當然,這些對比都是指數據量很大或者操作很頻繁的情況下的對比。 它還實現了 Queue 接口,該接口比 List 提供了更多的方法,包括 offer(),peek(),poll()等.

ArrayList 和 LinkedList 的使用場景, 其中 add 方法的實現 ArrayList,LinkedList 的實現以及插入, 查找, 刪除的過程

三. 使用 ArrayList 的迭代器會出現什麼問題? 單線程和多線程環境下;
答: 常用的迭代器設計模式, iterator 方法返回一個父類實現的迭代器。
1、 迭代器的 hasNext 方法的作用是判斷當前位置是否是數組最後一個位置, 相等爲 false,否則爲 true。
2、 迭代器 next 方法用於返回當前的元素, 並把指針指向下一個元素, 值得注意的是, 每次使用 next 方法的時候, 都會判斷創建迭代器獲取的這個容器的計數器 modCount 是否與此時 的 不 相 等 , 不 相 等 說 明 集 合 的 大 小 被 修 改 過 , 如 果 是 會 拋 出ConcurrentModificationException 異常, 如果相等調用 get 方法返回元素即可。

四. 數組(Array)和列表(ArrayList)有什麼區別? 什麼時候應該使用 Array 而不是ArrayList?
答: 不同點: 定義上: Array 可以包含基本類型和對象類型, ArrayList 只能包含對象類型。 容量上: Array 大小固定, ArrayList 的大小是動態變化的。 操作上: ArrayList 提供更多的方法和特性, 如: addAll(), removeAll(), iterator()等等。 使用基本數據類型或者知道數據元素數量的時候可以考慮 Array;ArrayList 處理固定數量的基本類型數據類型時會自動裝箱來減少編碼工作量, 但是相對較慢。

五. ArrayList 和 Vector 有何異同點?
相同點:
(1) 兩者都是基於索引的, 都是基於數組的。
(2) 兩者都維護插入順序, 我們可以根據插入順序來獲取元素。
(3) ArrayList 和 Vector 的迭代器實現都是 fail-fast 的。
(4) ArrayList 和 Vector 兩者允許 null 值, 也可以使用索引值對元素進行隨機訪問。
不同點:
(1) Vector 是同步, 線程安全, 而 ArrayList 非同步, 線程不安全。 對於 ArrayList, 如果迭代時改變列表, 應該使用 CopyOnWriteArrayList。
( 2) 但是, ArrayList 比 Vector 要快, 它因爲有同步, 不會過載。
( 3) 在使用上, ArrayList 更加通用, 因爲 Collections 工具類容易獲取同步列表和只讀列

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