這篇文章將為大家詳細講解有關(guān)如何進行HashSet的源碼解析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、重慶網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。核心團隊均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗,服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都履帶攪拌車等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗,同時也獲得了客戶的一致認可!
今天我們分析一下HashSet的底層實現(xiàn),因為HashSet底層是通過HashMap實現(xiàn)的。 所以HashSet底層也是通過哈希表的數(shù)據(jù)結(jié)構(gòu)存儲的。所以這里我們就不在介紹有關(guān)數(shù)據(jù)結(jié)構(gòu)方面的知識了,有不了解哈希表底層實現(xiàn)的可以去瀏覽HashMap這篇文章。下面我們將和其它集合一樣,從HashSet的初始化方面著手,來分析一下HashSet的底層實現(xiàn)。
初始化
我們看到,在HashSet中的無參構(gòu)造方法中,直接創(chuàng)建了一個HashMap對象。這就證明了我們上述所說的,HashSet底層是通過HashMap實現(xiàn)的。我們在分析HashMap那篇文章中有提到過。如果我們使用無參的構(gòu)造方法來創(chuàng)建HashMap對象,那么此時底層的數(shù)據(jù)結(jié)構(gòu)不會初始化,第一次初始化發(fā)生在第一次調(diào)用put方法的時候。所以我們在這里可以說,當(dāng)我們調(diào)用無參構(gòu)造方法來創(chuàng)建HashSet對象時,底層的數(shù)據(jù)結(jié)構(gòu)也不會執(zhí)行初始化。那么它第一次初始化的動作,也應(yīng)該發(fā)生在第一次調(diào)用添加元素的方法中,也就是HashSet中的add方法。下面我們看一下該方法的具體的邏輯。
上面代碼是HashSet中add方法,我們看到該方法的邏輯是直接調(diào)用了HashMap中的put方法,并將添加的元素的值設(shè)置為HashMap中的key,value存儲一個Object對象。
分析到這里使我們知道HashSet有以下幾點特性,它們分別是:
在HashSet中是不能保證元素的添加順序與遍歷順序是一致的。因為底層是通過HashMap中的key的值保存的。因為HashMap中的key的值是通過key的hash code計算出來的。所以不能保證添加順序與遍歷順序是一致的。
因為HashSet底層是通過HashMap中的key的值保存的,所以在HashSet中是不能保存重復(fù)元素的。因為在HashMap中的key也是不能重復(fù)的。如果在HashMap中保存了重復(fù)的key,那么后添加到HashMap中的value會替換掉先添加到HashMap中的value。
因為HashMap不是線程安全的集合類,并且我們分析HashSet源碼時,也沒有發(fā)現(xiàn)HashSet添加額外的同步關(guān)鍵字synchronized,所以說明HashSet也不是線程安全的集合類。
關(guān)于如何進行HashSet的源碼解析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
本文題目:如何進行HashSet的源碼解析
標(biāo)題來源:http://chinadenli.net/article32/giiosc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、營銷型網(wǎng)站建設(shè)、App設(shè)計、自適應(yīng)網(wǎng)站、網(wǎng)站收錄、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)