HashSet 概述
對于 HashSet 而言,它是基于 HashMap 實現(xiàn)的,底層采用 HashMap 來保存元素,所以如果對 HashMap 比較熟悉了,那么學(xué)習(xí) HashSet 也是很輕松的。
我們先通過 HashSet 最簡單的構(gòu)造函數(shù)和幾個成員變量來看一下,證明咱們上邊說的,其底層是 HashMap:
private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<>(); }
其實在英文注釋中已經(jīng)說的比較明確了。首先有一個HashMap的成員變量,我們在 HashSet 的構(gòu)造函數(shù)中將其初始化,默認(rèn)情況下采用的是 initial capacity為16,load factor 為 0.75。
HashSet 的實現(xiàn)
對于 HashSet 而言,它是基于 HashMap 實現(xiàn)的,HashSet 底層使用 HashMap 來保存所有元素,因此 HashSet 的實現(xiàn)比較簡單,相關(guān) HashSet 的操作,基本上都是直接調(diào)用底層 HashMap 的相關(guān)方法來完成,我們應(yīng)該為保存到 HashSet 中的對象覆蓋 hashCode() 和 equals()