Java集合的性能和使用場景分析

1、List使用場景

List的框架圖

上圖中有接口、抽象類和實現類,可以看到:

  • List 是一個接口,它繼承于Collection的接口,它代表著有序的隊列
  • AbstractList 是一個抽象類,它繼承于AbstractCollection;AbstractList實現List接口中除size()、get(int location)之外的函數
  • AbstractSequentialList 是一個抽象類,它繼承于AbstractList。AbstractSequentialList 實現了“鏈表中,根據index索引值操作鏈表的全部函數”
  • ArrayList, LinkedList, Vector, Stack是List的4個實現類
    ArrayList是一個數組隊列,相當于動態數組。它由數組實現,隨機訪問效率高,隨機插入、隨機刪除效率低
    LinkedList是一個雙向鏈表。它也可以被當作堆棧、隊列或雙端隊列進行操作。LinkedList隨機訪問效率低,但隨機插入、隨機刪除效率高
    Vector是矢量隊列,和ArrayList一樣,它也是一個動態數組,由數組實現;但是ArrayList是非線程安全的,而Vector是線程安全的
    Stack是棧,它繼承于Vector。它的特性是:先進后出(FILO, First In Last Out)
使用場景

(1) 對于需要快速插入,刪除元素,應該使用LinkedList;
(2) 對于需要快速隨機訪問元素,應該使用ArrayList;
(3) 對于“單線程環境” 或者 “多線程環境,但List僅僅只會被單個線程操作”,此時應該使用非同步的類(如ArrayList);
(4) 對于“多線程環境,且List可能同時被多個線程操作”,此時,應該使用同步的類(如Vector)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容