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

溫馨提示×

溫馨提示×

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

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

Java面試中如何從源碼角度分析HashSet實現原理

發布時間:2021-10-13 11:25:10 來源:億速云 閱讀:116 作者:柒染 欄目:編程語言

這篇文章給大家介紹Java面試中如何從源碼角度分析HashSet實現原理,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

面試官:請問HashSet有哪些特點?

應聘者:HashSet實現自set接口,set集合中元素無序且不能重復;

面試官:那么HashSet 如何保證元素不重復?

應聘者:因為HashSet底層是基于HashMap實現的,當你new一個HashSet時候,實際上是new了一個map,執行add方法時,實際上調用map的put方法,value始終是PRESENT,所以根據HashMap的一個特性: 將一個key-value對放入HashMap中時,首先根據key的hashCode()返回值決定該Entry的存儲位置,如果兩個key的hash值相同,那么它們的存儲位置相同。

如果這個兩個key的equalus比較返回true。那么新添加的Entry的value會覆蓋原來的Entry的value,key不會覆蓋。因此,如果向HashSet中添加一個已經存在的元素,新添加的集合元素不會覆蓋原來已有的集合元素;

源碼分析

先來看一下無參的構造函數:

public HashSet() {  map = new HashMap<>();}

很顯然,當你new一個HashSet的時候,實際上是new了一個HashMap

再來看一下add方法:

private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null;}

定義一個虛擬的Object PRESENT是向map中插入key-value對應的value,因為HashSet中只需要用到key,而HashMap是key-value鍵值對;所以,向map中添加鍵值對時,鍵值對的值固定是PRESENT。

源碼中HashSet的絕大部分方法都是通過調用HashMap的方法來實現的,其他的方法,就請大家自己查閱一下源碼吧。

關于Java面試中如何從源碼角度分析HashSet實現原理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

交口县| 弥勒县| 孝感市| 响水县| 红原县| 渝中区| 微山县| 梅河口市| 榆林市| 上高县| 阳高县| 中方县| 土默特左旗| 华宁县| 阿鲁科尔沁旗| 清涧县| 荃湾区| 郸城县| 华蓥市| 赫章县| 延长县| 开鲁县| 花莲市| 台东县| 华亭县| 遵义县| 湛江市| 山东省| 神池县| 黔东| 惠水县| 珠海市| 宁化县| 辛集市| 丽江市| 杭州市| 怀仁县| 习水县| 靖江市| 佛冈县| 邢台县|