成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HashSet源碼分析:JDK源碼系列

用戶83 / 1061人閱讀

摘要:簡介繼續(xù)分析源碼,上一篇文章把的分析完畢。本文開始分析簡單的介紹一下。存儲的元素是無序的并且允許使用空的元素。

1.簡介

繼續(xù)分析源碼,上一篇文章把HashMap的分析完畢。本文開始分析HashSet簡單的介紹一下。

HashSet是一個無重復(fù)元素集合,內(nèi)部使用HashMap實現(xiàn),所以HashMap的特征耶繼承了下來。存儲的元素是無序的并且HashSet允許使用空的元素。

HashSet是非同步的。如果多個線程同時訪問一個哈希 set,而其中至少一個線程修改了該 set,那么它必須 保持外部同步。(參考JDK1.8文檔,關(guān)注回復(fù)JDK可獲取中文版JDK文檔)

 Set s = Collections.synchronizedSet(new HashSet(...)); 
上文鏈接:

HashMap源碼閱讀(一)

HashMap源碼閱讀(二)

1.繼承結(jié)構(gòu)

先看一下HashMap的繼承結(jié)構(gòu)

和其他集合一樣HashSet也實現(xiàn)了Cloneable和Serializable兩個接口,同時也是先了Set接口實現(xiàn)了Set的一些接口規(guī)范。

Cloneable 克隆

Serializable序列化

2屬性

HashSet的存儲數(shù)據(jù)是由HashMap來實現(xiàn)的,所以HashMap的一些特性也都繼承了過來。在閱讀源碼的時候千萬不要直接的去閱讀HashSet在閱讀之前最好先把HashMap看了。在閱讀HashMap的時候最好結(jié)合著1.7版本的源碼一起看。

private transient HashMap map;

上面說到HashSet是由HashMap來實現(xiàn)的而存儲的數(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();
3.構(gòu)造方法

無參構(gòu)造方法,直接創(chuàng)建一個HashMap采用無參構(gòu)造方法的默認(rèn)屬性上篇文章說過默認(rèn)容量是16加載因子是0.75

指定容量

指定容量和加載因子,加載因子在HashMap中用來計算容量默認(rèn)的就是總?cè)萘?加載因子,默認(rèn)的加載因子是0.75

指定集合元素

4.添加

可以看出HashSet使用put進(jìn)行添加元素,要添加的元素作為mapd的Key 而value則默認(rèn)的就是PRESENT。上篇文章介紹過HashMap的put方法如果插入的值的Key不存在則返回null否則就返回已經(jīng)存在的值,所以這里做了一個判斷。是不是很簡單。

5.查找

查找元素調(diào)用了HashMap的containsKey方法如果存在返回true不存在返回false。

6.刪除

刪除方法也是調(diào)用map的remove方法,看到這里我們看出HashSet全部是依賴于HashMap。

7.迭代方法

也是通過Map來實現(xiàn)使用keySet來返回一個key的Iterator。

8.總結(jié)

其實HashSet的一些東西都是用HashMap來實現(xiàn)的,如果HashMap的源碼已經(jīng)閱讀過的話基本上沒有什么問題。(這可能是我寫的最輕松的一篇問文章哈哈哈哈哈)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75517.html

相關(guān)文章

  • JDK源碼(容器篇)

    摘要:三系列用于保存鍵值對,無論是,還是已棄用的或者線程安全的等,都是基于紅黑樹。是完全基于紅黑樹的,并在此基礎(chǔ)上實現(xiàn)了接口??梢钥吹剑挥屑t黑樹,且紅黑樹是通過內(nèi)部類來實現(xiàn)的。 JDK容器 前言 閱讀JDK源碼有段時間了,準(zhǔn)備以博客的形式記錄下來,也方便復(fù)習(xí)時查閱,本文參考JDK1.8源碼。 一、Collection Collection是所有容器的基類,定義了一些基礎(chǔ)方法。List、Se...

    Soarkey 評論0 收藏0
  • 3分鐘搞掂Set集合

    摘要:下面總結(jié)一下集合常用的三個子類吧無序,允許為,底層是散列表紅黑樹,非線程同步有序,不允許為,底層是紅黑樹非線程同步迭代有序,允許為,底層是雙向鏈表,非線程同步從結(jié)論而言我們就可以根據(jù)自己的實際情況來使用了。 前言 聲明,本文用的是jdk1.8 前面章節(jié)回顧: Collection總覽 List集合就這么簡單【源碼剖析】 Map集合、散列表、紅黑樹介紹 HashMap就是這么簡單【源碼...

    widuu 評論0 收藏0
  • 深入分析——HashSet是否真的無序?(JDK8)

    摘要:但是,如果像上例中只取最后幾位的時候,這可不是什么好事,即使我的數(shù)據(jù)分布很散亂,但是哈希沖突仍然會很嚴(yán)重。由于我們所創(chuàng)建的是類型的,這也是最巧的一點,類型的返回值就是其值本身,而存儲的時候元素通過一些運算后會得出自己在數(shù)組中所處的位置。 HashSet 是否無序 (一) 問題起因: 《Core Java Volume I—Fundamentals》中對HashSet的描述是這樣的: H...

    everfight 評論0 收藏0
  • 這幾道Java集合框架面試題在面試中幾乎必問

    摘要:若遇到哈希沖突,則將沖突的值加到鏈表中即可。之后相比于之前的版本,之后在解決哈希沖突時有了較大的變化,當(dāng)鏈表長度大于閾值默認(rèn)為時,將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時間。有序,唯一紅黑樹自平衡的排序二叉樹。 本文是最最最常見Java面試題總結(jié)系列第三周的文章。主要內(nèi)容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區(qū)別 HashMap的底層...

    bigdevil_s 評論0 收藏0
  • 前百度面試官整理的——Java后端面試題(一)

    摘要:發(fā)生了線程不安全情況。本來在中,發(fā)生哈希沖突是可以用鏈表法或者紅黑樹來解決的,但是在多線程中,可能就直接給覆蓋了。中,當(dāng)同一個值上元素的鏈表節(jié)點數(shù)不小于時,將不再以單鏈表的形式存儲了,會被調(diào)整成一顆紅黑樹。 showImg(https://segmentfault.com/img/bVbsVLk?w=288&h=226); List 和 Set 的區(qū)別 List , Set 都是繼承自...

    JessYanCoding 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<