從本文起,我們將開始分享 Java 集合方面的知識,關注公眾號「Java面典」了解更多 Java 知識點。
List 是繼承於 Collection 的接口,其實現類有 ArrayList,LinkedList,Vector 和 Stack。
ArrayList
特點
- ArrayList 內部是通過動態數組實現的,它允許對元素進行快速隨機訪問;
- 當數組大小不滿足時需要擴容,需要將已有數組移動到新的內存空間;
- 當從 ArrayList 的中間位置插入或者刪除元素時,需要對數組進行復制、移動代價比較高;
- 線程不安全
容量
- 初始容量:10,
- 擴容:(原始容量 x 3 ) / 2 + 1。
適用場景
- ArrayList 適合單線程,或多線程環境,但 List 只會被單個線程操作;
- 隨機查找和遍歷,不適合插入和刪除。
LinkedList
特點
- LinkedList 是基於雙向鏈表存儲數據的,很適合數據的動態插入和刪除;
- 可根據索引值獲取(get(int index)))或刪除(remove(int index))節點(實現原理:通過計數索引值實現,當 index > 鏈表長度的1/2,從鏈表尾部開始遍歷;反之,從鏈表頭部開始遍歷);
- 可作為隊列和棧使用,
- 線程不安全。
適用場景
它適合單線程中,順序讀取,不適合隨機讀取和隨機刪除。
Vector
特點
其特點大致與 ArrayList 一樣,除以下特點:
- 線程安全(因為內部方法都是通過 synchronized 關鍵字同步的)。
容量
- 初始容量:10;
- 擴容:若擴容系數 > 0,則將容量的值增加“擴容系數”;否則,將容量大小增加一倍。
使用場景
Vector 使用多線程,避免多線程同時寫而引起的不一致性。
Stack
Stack 相當於一個 Vector 棧。