HashSet 概述
對(duì)于 HashSet 而言,它是基于 HashMap 實(shí)現(xiàn)的,底層采用 HashMap 來(lái)保存元素,所以如果對(duì) HashMap 比較熟悉了,那么學(xué)習(xí) HashSet 也是很輕松的。
我們先通過(guò) HashSet 最簡(jiǎn)單的構(gòu)造函數(shù)和幾個(gè)成員變量來(lái)看一下,證明咱們上邊說(shuō)的,其底層是 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<>(); }
其實(shí)在英文注釋中已經(jīng)說(shuō)的比較明確了。首先有一個(gè)HashMap的成員變量,我們?cè)?HashSet 的構(gòu)造函數(shù)中將其初始化,默認(rèn)情況下采用的是 initial capacity為16,load factor 為 0.75。
HashSet 的實(shí)現(xiàn)
對(duì)于 HashSet 而言,它是基于 HashMap 實(shí)現(xiàn)的,HashSet 底層使用 HashMap 來(lái)保存所有元素,因此 HashSet 的實(shí)現(xiàn)比較簡(jiǎn)單,相關(guān) HashSet 的操作,基本上都是直接調(diào)用底層 HashMap 的相關(guān)方法來(lái)完成,我們應(yīng)該為保存到 HashSet 中的對(duì)象覆蓋 hashCode() 和 equals()