繼續(xù)分析源碼,上一篇文章把HashMap的分析完畢。本文開始分析HashSet簡(jiǎn)單的介紹一下。
HashSet是一個(gè)無(wú)重復(fù)元素集合,內(nèi)部使用HashMap實(shí)現(xiàn),所以HashMap的特征耶繼承了下來(lái)。存儲(chǔ)的元素是無(wú)序的并且HashSet允許使用空的元素。
HashSet是非同步的。如果多個(gè)線程同時(shí)訪問(wèn)一個(gè)哈希 set,而其中至少一個(gè)線程修改了該 set,那么它必須 保持外部同步。(參考JDK1.8文檔,關(guān)注回復(fù)JDK可獲取中文版JDK文檔)
Set s = Collections.synchronizedSet(new HashSet(...));
上文鏈接:
HashMap源碼閱讀(一)
HashMap源碼閱讀(二)
先看一下HashMap的繼承結(jié)構(gòu)
和其他集合一樣HashSet也實(shí)現(xiàn)了Cloneable和Serializable兩個(gè)接口,同時(shí)也是先了Set接口實(shí)現(xiàn)了Set的一些接口規(guī)范。
HashSet的存儲(chǔ)數(shù)據(jù)是由HashMap來(lái)實(shí)現(xiàn)的,所以HashMap的一些特性也都繼承了過(guò)來(lái)。在閱讀源碼的時(shí)候千萬(wàn)不要直接的去閱讀HashSet在閱讀之前最好先把HashMap看了。在閱讀HashMap的時(shí)候最好結(jié)合著1.7版本的源碼一起看。
private transient HashMap<E,Object> map;
上面說(shuō)到HashSet是由HashMap來(lái)實(shí)現(xiàn)的而存儲(chǔ)的數(shù)據(jù)作為HashMap的K,V統(tǒng)一就是PRESENT
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
無(wú)參構(gòu)造方法,直接創(chuàng)建一個(gè)HashMap采用無(wú)參構(gòu)造方法的默認(rèn)屬性上篇文章說(shuō)過(guò)默認(rèn)容量是16加載因子是0.75
指定容量
指定容量和加載因子,加載因子在HashMap中用來(lái)計(jì)算容量默認(rèn)的就是總?cè)萘?加載因子,默認(rèn)的加載因子是0.75
指定集合元素
可以看出HashSet使用put進(jìn)行添加元素,要添加的元素作為mapd的Key 而value則默認(rèn)的就是PRESENT。上篇文章介紹過(guò)HashMap的put方法如果插入的值的Key不存在則返回null否則就返回已經(jīng)存在的值,所以這里做了一個(gè)判斷。是不是很簡(jiǎn)單。
查找元素調(diào)用了HashMap的containsKey方法如果存在返回true不存在返回false。
刪除方法也是調(diào)用map的remove方法,看到這里我們看出HashSet全部是依賴于HashMap。
也是通過(guò)Map來(lái)實(shí)現(xiàn)使用keySet來(lái)返回一個(gè)key的Iterator。
其實(shí)HashSet的一些東西都是用HashMap來(lái)實(shí)現(xiàn)的,如果HashMap的源碼已經(jīng)閱讀過(guò)的話基本上沒(méi)有什么問(wèn)題。(這可能是我寫的最輕松的一篇問(wèn)文章哈哈哈哈哈)
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。
分享名稱:HashSet源碼分析:JDK源碼系列-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://www.chinadenli.net/article18/dcshgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、做網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄、全網(wǎng)營(yíng)銷推廣、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容