国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

HashSet源碼分析:JDK源碼系列

用戶83 / 1040人閱讀

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

1.簡介

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

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

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

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

HashMap源碼閱讀(一)

HashMap源碼閱讀(二)

1.繼承結構

先看一下HashMap的繼承結構

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

Cloneable 克隆

Serializable序列化

2屬性

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

private transient HashMap map;

上面說到HashSet是由HashMap來實現的而存儲的數據作為HashMap的K,V統一就是PRESENT

   // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();
3.構造方法

無參構造方法,直接創建一個HashMap采用無參構造方法的默認屬性上篇文章說過默認容量是16加載因子是0.75

指定容量

指定容量和加載因子,加載因子在HashMap中用來計算容量默認的就是總容量*加載因子,默認的加載因子是0.75

指定集合元素

4.添加

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

5.查找

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

6.刪除

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

7.迭代方法

也是通過Map來實現使用keySet來返回一個key的Iterator。

8.總結

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75517.html

相關文章

  • JDK源碼(容器篇)

    摘要:三系列用于保存鍵值對,無論是,還是已棄用的或者線程安全的等,都是基于紅黑樹。是完全基于紅黑樹的,并在此基礎上實現了接口。可以看到,只有紅黑樹,且紅黑樹是通過內部類來實現的。 JDK容器 前言 閱讀JDK源碼有段時間了,準備以博客的形式記錄下來,也方便復習時查閱,本文參考JDK1.8源碼。 一、Collection Collection是所有容器的基類,定義了一些基礎方法。List、Se...

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

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

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

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

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

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

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

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

    JessYanCoding 評論0 收藏0

發表評論

0條評論

用戶83

|高級講師

TA的文章

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