java之Set源碼淺析

來源:互聯網
上載者:User

標籤:java   set   hashset   

Set的介面和實作類別是最簡單的,說它簡單原因是因為它的實現都是基於實際的map實現的。如 hashSet 基於hashMap,TreeSet 基於TreeMap,CopyOnWriteArraySet 基於 CopyOnWriteArrayList 。

故對其實現簡要分析。首先看下面的類圖:



Set

Set介面的意義是,含有相等的元素,相等由集合內元素的equals方法決定。Set介面繼承Collection介面,但是其實其所含的方法和Collection介面一樣。

AbstractSet

從類圖可以看出,AbstractSet介面繼承於AbstractCollection,它是Set的抽象實現,但是其除了增加了equals和hashcode方法,其他方法均繼承而來(removeall方法外)。我們可以自訂Set示意如下,加深對其理解:

Set<String> set = new /**     *     *實現樣本     */    AbstractSet<String>(){       /*       *  預設實現為拋出異常,可變集合需要實現此方法       */      @Override      public boolean add(String e) {                 return false;      }           /*       * 可變集合需要實現remove方法       */      @Override      public Iterator<String> iterator() {                 return new Iterator<String>(){            public boolean hasNext() {             // TODO Auto-generated method stub             return false;           }            public String next() {             // TODO Auto-generated method stub             return null;           }            public void remove() {             // TODO Auto-generated method stub                       }                   };      }       @Override      public int size() {         // TODO Auto-generated method stub         return 0;      }         };

HashSet

其基於HashMap實現,內部有個欄位為hashMap,如下所示:

// 基於map實現,鍵為元素,值為固定的PRESENTprivate transient HashMap<E,Object> map; //map的索引值 private static final Object PRESENT = new Object();     /**     * 建構函式     */    public HashSet() {        map = new HashMap<>();}/**     清晰明了*/public boolean add(E e) {        return map.put(e, PRESENT)==null;    }/**     迭代器為map的keySet     */    public Iterator<E> iterator() {        return map.keySet().iterator();    }

TreeSet和CopyOnWriteArraySet

它們分別給予TreeMap和CopyOnWriteArrayList實現,這裡不再贅述。

java之Set源碼淺析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.