常用Java集合類總結

網易雲社群發表於2018-12-20

此文已由作者趙計剛授權網易雲社群釋出。

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。


7.1、List(允許重複元素)

  • ArrayList:

    • 底層資料結構:Object[]

    • 查詢(get)、遍歷(iterator)、修改(set)使用的比較多的情況下,用ArrayList

    • 可擴容,容量無限

  • LinkedList

    • 底層資料結構:環形雙向連結串列

    • 增加(add)、刪除(remove)使用比較多的情況下,用LinkedList

    • 連結串列,容量無限

說明:

1)add(E e):在陣列末尾插入元素,ArrayList需要考慮擴容問題,一旦擴容就要進行陣列複製,LinkedList不需要;

2)add(int index):在陣列中間插入元素,ArrayList需要考慮將該index及其後的陣列元素全部複製後移一位,LinkedList不需要

7.2、Set(不允許重複元素,所以可用於去重操作)

  • HashSet:

    • 底層資料結構:HashMap

    • 可看做容量無限

  • TreeSet:

    • 底層資料結構:TreeMap

    • 容量無限

7.3、Map(key-value)

  • HashMap:

    • 底層資料結構:連結串列陣列

    • 可擴容,且最大容量極大,可看做容量無限

  • TreeMap:

    • 底層資料結構:紅黑樹

    • 可以實現按key排序(在使用中,要麼使用TreeMap(Comparator),要麼讓key物件實現Comparable)

    • 紅黑樹,容量無限

注意:

  • 以上全部執行緒不安全

  • 對於查詢和刪除較為頻繁,且元素數量較多(元素數量>100)的情況下,Set和Map效能要比List好一些(單執行緒情況下)

上邊第二個結論是在《分散式Java基礎:應用與實踐》一書中,林昊通過一系列的測試結果得出的。



免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等套餐

更多網易技術、產品、運營經驗分享請點選


相關文章:
【推薦】 LinkedBlockingQueue原始碼解析(1)
【推薦】 從整理看視覺設計(網易雲課堂我的學習中心-微專業視覺優化)
【推薦】 L-BFGS演算法介紹


相關文章