ArrayList、Vector、LinkedList對比

ArrayList、Vector、LinkedList作爲List的三個常用子類,爲序列化一維數組提供了很好的保障。他們有共同點和各自的特點。依次分析。

介紹:

ArrayList:動態數組,從jdk1.2開始,array(數組)的升級版本,實現動態擴容,從而節省了一定的空間。

Vector:向量,自動增長數組,從jdk1.0就有

LinkedList:鏈表,利用類之間的引用關係,實現鏈式結構,jdk1.2開始。

特點

從ArrayList與Vector來談:

  1. 這兩個都是基於數組實現。
  2. Vector進行了方法的同步,從線程安全性上來看,Vector是線程安全的,而ArrayList不是。
  3. Vector和ArrayList的低層實現不同:
    1. 初始化策略:ArrayList在new的時候不初始化,而在第一次添加元素(add方法)的時候初始化數組大小。而Vector在new的時候就會初始化。(圖ArrayList源碼中add函數和Vector源碼中構造方法)
    2. 擴容策略:ArrayList當裝滿了擴容1.5倍(圖1),Vector默認擴容2倍(支持自定義capacityIncrement)(圖2)
  4. 兩者進行增刪改查的效率是差不多的,因爲都是用數組結構實現。

談談LinkedList:

  1. 基於雙向鏈表實現。
  2. 增刪數據效率優於數組,因爲數組要移動很多數據(移動n-index個數據)
  3. 改查數據,由於要移動指針,鏈表效率稍微低一點。
  4. 線程不安全,沒有同步機制。
  5. 不存在擴容和初始化問題,鏈式結構。

 

總結一下:當增刪操作、在指定位置插入刪除的操作較多的時候,選擇LinkedList。當查找元素、更改元素、在末端增加刪除元素的操作多,而刪除操作少的時候,ArrayList和Vector比較好。

另附:java實現單鏈表、雙鏈表、雙向鏈表

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