天天看點

Java刷題知識點之ArrayList 、LinkedList 、Vector 的底層實作和差別

List集合中子類 Vector、ArrayList、LinkedList

  List:有序, 可重複, 有索引。三者均為可伸縮數組。

  Vector:底層資料結構是數組結構。 jdk1.0版本。 線程安全的。 無論增删還是查詢都非常慢。預設擴充為原來的2倍。

  ArrayList:底層資料結構是數組結構。 線程不安全的。 是以ArrayList的出現替代了Vector, 但是查詢的速度很快。預設擴充為原來的1.5倍。

  LinkedList:底層是連結清單資料結構。 線程不安全的, 同時對元素的增删操作效率很高。但查詢慢。

  注意: 連結清單結構是這樣的: 讓後一個元素記住前一個元素的位址。  

   Vector 和  ArrayList都是基于存儲元素的Object[ ] array來實作的。

   LinkedList是采用雙向清單來實作的。

  1、 線程同步,Vector線程安全,ArrayList線程不安全。

  2、 效率問題,Vector效率低,ArrayList效率高。

  3、 增長數量,Vector以1.5倍增長,ArrayList以2倍增長。

Java刷題知識點之ArrayList 、LinkedList 、Vector 的底層實作和差別

 LinkdedList,增删改查很快:

Java刷題知識點之ArrayList 、LinkedList 、Vector 的底層實作和差別

LinkedList的查詢速率比較慢:

Java刷題知識點之ArrayList 、LinkedList 、Vector 的底層實作和差別

  

    List集合子類Vector這個類已經不常用了, 我就說裡面的一個方法, Elements方法, 這個方法的傳回值是枚舉接口, 裡面有兩個方法, 判斷和擷取。此接口Enumeration的功能與 Iterator 接口的功能是重複的。Enumeration的名稱和方法的名稱過程, 書寫很麻煩。 是以被Iterator所取代。

ArrayList 、 LinkedList 、 Vector 的底層實作和差別:

  ArrayList是實作了基于動态數組的資料結構,LinkedList基于雙線連結清單的資料結構。

  ArrayList可以随機定位對于新增和删除操作add和remove,LinedList比較占優勢

  具有Collection接口必備的iterator()方法外,List還提供一個listIterator()方法ListIterator多了一些add()之類的方法,允許添加,删除,設定元素,還能向前或向後周遊。

  Vector與ArrayList唯一的差別是,Vector是線程安全的,即它的大部分方法都包含有關鍵字synchronized,是以,若對于單一線程的應用來說,最好使用ArrayList代替Vector,因為這樣效率會快很多(類似的情況有StringBuffer線程安全的與StringBuilder線程不安全的);而在多線程程式中,為了保證資料的同步和一緻性,可以使用Vector代替ArrayList實作同樣的功能。

本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/7634403.html,如需轉載請自行聯系原作者