java中的List介面(ArrayList、Vector、LinkedList)

平凡晨發表於2022-03-11

一、List介面有三個常用的集合(ArrayList、Vector、LinkedList)

ArrayList注意事項

  • ArrayList底層是用陣列來實現資料儲存的 底層是 transient Object[ ] elementdata  是一個Object型別的陣列
  • 這個  transient 意思是:短暫的,瞬間的 用這個關鍵字修飾表示 該屬性不會序列化,解釋:有些屬性不需要被序列化,比如一些敏感的資訊,銀行卡密碼等,一些隱私,可以用transient
  • ArrayList基本等同於Vector,ArrayList是執行緒不安全的,但效率高,在多執行緒的情況下,不建議使用ArrayList

ArrayList的原始碼分析

  • ArrayList底層是一個陣列
  • ArrayList有兩個構造器:1、一個是無參的。     2、一個是有參的構造器傳入一個int型別的值,指定ArrayList陣列的大小
  • 當建立ArrayList物件時,呼叫無參構造器,則初始化陣列大小為10  也就是把 elementdata 初始化 = 10。 當新增到第11個的時候,會對陣列進行擴容, 會按照 elementdata 的1.5倍擴容。 如果15個空間用完,則會以15的1.5倍擴容。從此類推,如果沒給值,預設的就是null。
  • 當建立ArrayList物件時,呼叫有參構造器,會傳入一個int值,指定陣列大小。假設傳入的是8,則 elementdata = 8 如果超過8個,就擴容,則是 8的1.5倍。類推,沒有資料預設為null。

Vector

  • Vector底層也是一個物件陣列
  • Vector底層和Arraylist幾乎相同,就是一個執行緒安全,一個執行緒不安全
  • Vector是執行緒同步的,即執行緒安全,Vector操作方法有Synchoronized
  • public synchronized boolean add(E e) { 
            modCount++; 
            ensureCapacityHelper(elementCount + 1); 
            elementData[elementCount++] = e;
            return true;
    }
           
    

ArrayList和Vector的區別

 

LinkedList介紹

  • LinkedList底層維護了一個雙向連結串列
  •  可以新增任何元素,元素可以重複,包括null
  • 執行緒不安全,沒有實現同步

 LinkedList的底層分析

  • LinkedList 是一個繼承於AbstractSequentialList的雙向連結串列。它也可以被當作堆疊、佇列或雙端佇列進行操作。 

  • LinkedList中維護了兩個屬性:一個是first和last分別指向首屆點和尾節點
  • 每一個節點裡面有一個Node物件,裡面有維護了prev,next,item三個屬性,其中通過prev指向指向前一個節點,通過next指向後一個節點。最終實現雙向連結串列
  • 所以LInkedList的元素新增和刪除,不是通過陣列完成的,相對來說效率比較高

 

ArrayList和LinkedList區別

 

 

相關文章