HashSet
HashSet是基于HashMap來實(shí)現(xiàn)的掀泳,操作很簡單懒熙,更像是對HashMap做了一次“封裝”罪针,而且只使用了HashMap的key來實(shí)現(xiàn)各種特性蕾殴,而HashMap的value始終都是PRESENT笑撞。
HashSet不允許重復(fù)(HashMap的key不允許重復(fù),如果出現(xiàn)重復(fù)就覆蓋)钓觉,允許null值茴肥,非線程安全。
構(gòu)造方法
HashSet()
構(gòu)造一個(gè)新的空 set荡灾,其底層 HashMap 實(shí)例的默認(rèn)初始容量是 16瓤狐,加載因子是 0.75瞬铸。
HashSet(Collection<? extends E> c)
構(gòu)造一個(gè)包含指定 collection 中的元素的新 set。
HashSet(int initialCapacity)
構(gòu)造一個(gè)新的空 set础锐,其底層 HashMap 實(shí)例具有指定的初始容量和默認(rèn)的加載因子(0.75)嗓节。
HashSet(int initialCapacity, float loadFactor)
構(gòu)造一個(gè)新的空 set,其底層 HashMap 實(shí)例具有指定的初始容量和指定的加載因子皆警。
在HashSet中我們new對象的時(shí)候會創(chuàng)建一個(gè)初始默認(rèn)容量是16的HashSet集合肴熏;其中默認(rèn)的一個(gè)值loadFactor:
加載因子:0.75
加載因子是數(shù)組的長度的百分比剥哑;16*0.75 = 12酷师;
意思就是數(shù)組中的桶數(shù)達(dá)到12個(gè)時(shí)數(shù)組就要擴(kuò)容础废;(復(fù)制)占卧,擴(kuò)容到原來的2倍瓣窄;
0.75是一個(gè)折中的數(shù)據(jù)溢吻;是增刪改查的最優(yōu)速度乌庶;
new的時(shí)候可以直接初始化數(shù)組長度和loadFactor(加載因子)來改變加載因子从诲;
數(shù)據(jù)再哈希:rehash 相當(dāng)于再擴(kuò)容一次左痢;