91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HashSet源碼分析:JDK源碼系列

發布時間:2020-06-15 07:37:52 來源:網絡 閱讀:334 作者:亂敲代碼 欄目:開發技術

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源碼分析:JDK源碼系列

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

  • Cloneable 克隆
  • Serializable序列化

2屬性

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

private transient HashMap<E,Object> 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

HashSet源碼分析:JDK源碼系列

指定容量

HashSet源碼分析:JDK源碼系列

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

HashSet源碼分析:JDK源碼系列

指定集合元素

HashSet源碼分析:JDK源碼系列

4.添加

HashSet源碼分析:JDK源碼系列

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

5.查找

HashSet源碼分析:JDK源碼系列

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

6.刪除

HashSet源碼分析:JDK源碼系列

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

7.迭代方法

HashSet源碼分析:JDK源碼系列

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

8.總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朝阳县| 克拉玛依市| 汉寿县| 康乐县| 平安县| 渝中区| 县级市| 象州县| 廊坊市| 治县。| 鸡东县| 芒康县| 宝清县| 永川市| 商南县| 曲沃县| 东明县| 晴隆县| 台南县| 新乡市| 峡江县| 炉霍县| 剑川县| 湄潭县| 北碚区| 韶山市| 安远县| 靖宇县| 汪清县| 同仁县| 长垣县| 靖江市| 达尔| 梅州市| 汉川市| 台安县| 武邑县| 眉山市| 汤原县| 札达县| 青冈县|