此文已由作者趙計剛授權網易雲社群釋出。
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
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演算法介紹