java集合框架之Set集合實現類性能對比

1.Set接口的實現類

共同的特點:
     1):都不允許元素重複.
     2):都不是線程安全的類.
     解決方案:Set s = Collections.synchronizedSet(Set對象);
-----------------------------------------------------------------------------------------
HashSet: 不保證元素的先後添加順序.
                 底層採用的是哈希表算法,查詢效率極高.
                 判斷兩個對象是否相等的規則:
                                                       1):equals比較爲true.
                                                       2):hashCode值相同.

                 要求:要求存在在哈希中的對象元素都得覆蓋equals和hashCode方法.


LinkedHashSet:
                HashSet的子類,底層也採用的是哈希表算法,但是也使用了鏈表算法來維持元素的先後添加順序.
                判斷兩個對象是否相等的規則和HashSet相同.
                因爲需要多使用一個鏈表倆記錄元素的順序,所以性能相對於HashSet較低.

                一般少用, 如果要求一個集合既要保證元素不重複,也需要記錄添加先後順序,才選擇使用LinkedHashSet.


TreeSet:不保證元素的先後添加順序,但是會對集合中的元素做排序操作.
              底層採用紅黑樹算法(樹結構,比較擅長做範圍查詢).
              TreeSet要麼採用自然排序,要麼定製排序.
              自然排序:  要求在TreeSet集合中的對象必須實現java.lang.Comparable接口,並覆蓋compareTo方法.
              定製排序:  要求在構建TreeSet對象的時候,傳入一個比較器對象(必須實現java.lang.Comparator接口).
                                在比較器中覆蓋compare方法,並編寫比較規則.

              TreeSet判斷元素對象重複的規則:
                                         compareTo/compare方法是否返回0.如果返回0,則視爲是同一個對象.

-----------------------------------------------------------------------------
HashSet做等值查詢效率高,TreeSet做範圍查詢效率高.

而我們更多的情況,都是做等值查詢, 在數據庫的索引中做範圍查詢較多,所以樹結構主要用於做索引,用來提高查詢效率.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章