四種List實現類的對比總結
此文已由作者趙計剛授權網易雲社區發布。
歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。
1、ArrayList
非線程安全
基於對象數組
get(int index)不需要遍歷數組,速度快;
iterator()方法中調用了get(int index),所以速度也快
set(int index, E e)不需要遍歷數組,速度快
add方法需要考慮擴容與數組復制問題,速度慢
remove(Object o)需要遍歷數組,並復制數組元素,速度慢
remove(int index)不需要遍歷數組,需要復制數組元素,但不常用
contain(E)需要遍歷數組
2、LinkedList
非線程安全
基於環形雙向鏈表
get(int index)需要遍歷鏈表,速度慢;
iterator()方法中調用了get(int index),所以速度也慢
set(int index, E e)方法中調用了get(int index),所以速度也慢
add方法不需要考慮擴容與數組復制問題,只需創建新對象,再將新對象的前後節點的指針指向重新分配一下就好,速度快
remove(Object o)需要遍歷鏈表,但不需要復制元素,只需將所要刪除的對象的前後節點的指針指向重新分配一下以及將所要刪除的對象的三個屬性置空即可,速度快
remove(int index)需要遍歷鏈表,但不需要復制元素,只需將所要刪除的對象的前後節點的指針指向重新分配一下以及將所要刪除的對象的三個屬性置空即可,但不常用
contain(E)需要遍歷鏈表
3、Vector(線程安全的ArrayList)
線程安全
擴容機制與ArrayList不同
4、Stack(繼承於Vector)
線程安全
效率低下,可采用雙端隊列Deque或LinkedList來實現,Deque用的較多
總結:
在查詢(get)、遍歷(iterator)、修改(set)使用的比較多的情況下,用ArrayList
在增加(add)、刪除(remove)使用比較多的情況下,用LinkedList
在需要線程安全而且對效率要求比較低的情況下,使用Vector,當然,實現ArrayList線程安全的方法也有很多,以後再說
在需要使用棧結構的情況下,使用Deque,Stack廢棄就行了
免費領取驗證碼、內容安全、短信發送、直播點播體驗包及雲服務器等套餐
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 Spring Boot 學習系列(序)—Spring Boot
四種List實現類的對比總結