Java常用ArrayList LinkedList 集合比較

來源:互聯網
上載者:User

1. arraylist

  基於數組方式實現,無容量的限制。

  在執行插入元素時可能要擴容,在刪除元素時並不會減少數組的容量。

  如果希望相應的縮小數組容量,可以調用trimtosize()

  在尋找元素時要遍曆數組,對於非null的元素採取equals的方式尋找。

  非安全執行緒。

2. linkedlist

  基於雙向鏈表機制實現。

  元素的插入、移動較快。

  非安全執行緒。

3. vector

  基於object數組的方式來實現的。

  基於synchronized實現的安全執行緒的arraylist。

  在插入元素時容量擴充的機制和arraylist稍有不同:
  如果capcacityincrement > 0, 則object數組的大小擴大為現有size加上capcacityincrement;
  如果capcacityincrement < 0, 則object數組的大小擴大為現有size的兩倍;

4. stack

  基於vector實現,支援lifo。

5. hashset

  基於hashmap實現,無容量限制。

  不允許元素重複。

  非安全執行緒。

6. treeset

  基於treemap實現,支援排序。

  非安全執行緒。

7. hashmap

  採用數組方式儲存key、value構成的entry對象,無容量限制。

  基於key hash尋找entry對象存放到數組的位置,對於hash衝突採用鏈表的方式來解決。

  在插入元素時可能會擴大數組的容量,在擴大容量時會重新計算hash,並複製對象到新的數組中。

  非安全執行緒。

8. treemap

  基於紅/黑樹狀結構實現,無容量限制。

  非安全執行緒。

-----------------------------------
適用情境:

  對於尋找和刪除較為頻繁,且元素數量較多的應用,set或map是更好的選擇;

  arraylist適用於通過為位置來讀取元素的情境;

  linkedlist 適用於要頭尾操作或插入指定位置的情境;

  vector 適用於要安全執行緒的arraylist的情境;

  stack 適用於安全執行緒的lifo情境;

  hashset 適用於對排序沒有要求的非重複元素的存放;

  treeset 適用於要排序的非重複元素的存放;

  hashmap 適用於大部分key-value的存取情境;

  treemap 適用於需排序存放的key-value情境。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.