List集合類使用場景
- java提供的List就是一個"線性表接口",ArrayList(基於數組的線性表)、LinkedList(基於鏈的線性表)是線性表的兩種典型實現
- Queue代表了隊列,Deque代表了雙端隊列(既可以作爲隊列使用、也可以作爲棧使用)
- 因爲數組以一塊連續內存來保存所有的數組元素,所以數組在隨機訪問時性能最好。所以的內部以數組作爲底層實現的集合在隨機訪問時性能最好。
- 內部以鏈表作爲底層實現的集合在執行插入、刪除操作時有很好的性能
- 進行迭代操作時,以鏈表作爲底層實現的集合比以數組作爲底層實現的集合性能好
Set集合類使用場景
- HashSet的性能總是比TreeSet好(特別是最常用的添加、查詢元素等操作),因爲TreeSet需要額外的紅黑樹算法來維護集合元素的次序。只有當需要一個保持排序的Set時,才應該使用TreeSet,否則都應該使用HashSet
- 對於普通的插入、刪除操作,LinkedHashSet比HashSet要略慢一點,這是由維護鏈表所帶來的開銷造成的。不過,因爲有了鏈表的存在,遍歷LinkedHashSet會更快
- EnumSet是所有Set實現類中性能最好的,但它只能保存同一個枚舉類的枚舉值作爲集合元素
- HashSet、TreeSet、EnumSet都是"線程不安全"的,通常可以通過Collections工具類的synchronizedSortedSet方法來"包裝"該Set集合。 SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
Map集合類使用場景
- HashMap和Hashtable的效率大致相同,因爲它們的實現機制幾乎完全一樣。但HashMap通常比Hashtable要快一點,因爲Hashtable需要額外的線程同步控制
- TreeMap通常比HashMap、Hashtable要慢(尤其是在插入、刪除key-value對時更慢),因爲TreeMap底層採用紅黑樹來管理key-value對
- 使用TreeMap的一個好處就是: TreeMap中的key-value對總是處於有序狀態,無須專門進行排序操作