牛客網Java刷題知識點之ArrayList 、LinkedList 、Vector 的底層實現和區別


 

 

  不多說,直接上干貨!

 

 

  這篇我是從整體出發去寫的。

牛客網Java刷題知識點之Java 集合框架的構成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

 

 

 

 

 

 

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倍增長。

 

 

 

 

 

 

 

 

 LinkdedList,增刪改查很快:

 

 

 

 

 

 

 

LinkedList的查詢速率比較慢:

 

 

 

 

 

 

  

 

    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實現同樣的功能。


免責聲明!

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



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