Java中各Set實現類的效能分析

quentain發表於2015-09-15

            HashSet和TreeSet是Set的兩個典型實現,到底如何選擇HashSet和TreeSet呢?HashSet的效能總是比TreeSet好,(特別是最常用的新增、查詢元素等操作),因為TreeSet需要額外的紅黑樹演算法來維護集合元素的次序。只有當需要一個保持排序的Set時,才應該使用TreeSet,否則都應該使用HashSet.

           HashSet還有一個子類:LinkedHashSet,對於普通的插入、刪除操作,LinkedHashSet比HashSet要略微慢一點,這是由維護連結串列所帶來的額外開銷造成的,但由於有了連結串列,遍歷LinkedHashSet會更快。

           EnumSet是所有Set實現類中效能最好的,但它只能儲存同一個列舉類的列舉值作為集合元素。

           必須指出的是,Set的三個實現類HashSet、TreeSet和EnumSet都是執行緒不安全的。如果有多個執行緒同時訪問一個Set集合,並且有超過一個執行緒修改了該Set集合,則必須手動保證該Set集合的同步性。通常可以通過Collections工具類的synchronizedSortedSet方法來包裝該Set集合。此操作最好在建立時進行,以防止對Set集合的意外非同步訪問。

相關文章