區別是什麼

他們的底層實現不同,ArrayList和Map的底層實現是數組,Set的底層實現是Map,
Map是要存放兩個值,key和value,key不能重複,而Set的實現是存放Map的key,所以Set的值也不能重複,Map,和Set無序且不可重複,ArrayList有序可重複

如果ArrayList 和Map存儲的元素都比較多。那麼在取元素方面,ArrayList要慢很多。
但是這也不是絕對的,因爲ArrayList底層基於數組,如果你明確的知道你要取的元素在哪個下標上,那麼ArrayList也是相當的快。但是如果你不清楚,只能通過迭代內部全部元素然後進行條件判斷查找,那麼ArrayList就要慢的多,因爲他要從頭到尾一個個的元素去查,直到找到滿足你的要求的那個元素,而Map則不需要迭代,因爲Map有鍵,直接取鍵對應的值。

對於添加元素,ArrayList是在數組的結尾追加,當容量不夠時,創建一個新的更長的數組然後將舊的全部拷貝過來。Map和他的方式差不多,也是容量不足的時候需要重新創建新(等於自身一般的內存)的然後拷貝,但是當發生刪除元素時,ArrayList簡直就是災難。假設你有10000個元素,你刪除首個元素,在刪除完畢以後 ArrayList中的所有元素都必須進行一次移動操作,向前位移。。。而Map則不需要。

大概就是這樣,如果你考慮一個長度比較可預測的保存元素的集合,並且很少有刪除操作,大部分是進行全部迭代的操作,那麼用ArrayList會比較合適。
如果你的List還要經常增刪,那麼用LinkedList比較合適。
如果你要快速查找,取值,用HashMap比較合適。
如果同時要保證,元素放進去的順序和取出來的順序一致用LinkedHashMap。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章