Java容器源碼分析-HashSet vs TreeSet vs LinkedHashSet

        這幾天看了下容器的源碼,總結一下HashSet vs TreeSet vs LinkedHashSet的區別, 以下圖,collection的繼承實現分支,這裏先只講解set分支html

一、HashSet vs TreeSet vs LinkedHashSet三者的數據結構分析數據結構

     (1)HashSet:由哈希表(其實是一個HashMap實例)支持。它不保證set 的迭代順序;特別是它不保證該順序恆久不變。此類容許使用null元素。對於HashSet中保存的對象,請注意正確重寫其equals和hashCode方法,以保證放入的對象的惟一性。函數

     注意:hashSet是利用HashMap的key進行數據存儲。同時HashMap的key具備惟一性性能

     參考:http://www.cnblogs.com/ITtangtang/p/3948538.html.net

    (2) TreeSet:TreeSet其實是TreeMap實現的。當咱們構造TreeSet時;若使用不帶參數的構造函數,則TreeSet的使用天然比較器;若用戶須要使用自定義的比較器,則須要使用帶比較器的參數。htm

      參考:http://www.cnblogs.com/skywang12345/p/3311268.html對象

     (3) LinkedHashSet: LinkedHashSet也是一個集合,與HashSet不一樣的是,LinkedHashSet是有序的,因爲其繼承了HashSet,因此構造方法中調用的是HashSet的構造方法,在HashSet的構造方法中有一個專門爲LinkedHashSet重寫的構造方法。而且其內部利用LinkedHashMap實現的。blog

      參考:http://blog.csdn.net/wxl1234579/article/details/54971525繼承

 

總結:源碼

        使用Set集合的主要緣由是由於Set集合裏面沒有重複的元素。Set集合有三個常見的實現類:HashSet,TreeSet,LinkedHashSet。何時,選擇哪個使用很是重要。簡單的說,若是你關注性能,應該使用HashSet;若是你須要一個有序的Set集合,應該使用TreeSet;若是你須要一個Set集合保存了原始的元素插入順序,應該使用LinkedHashSet。

           注意:若是要詳細研究set的原理,請去查看相對應的map實現

相關文章
相關標籤/搜索