最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java面試題 從源碼角度分析HashSet實現(xiàn)原理

 更新時間:2019年07月25日 08:25:17   作者:Java螞蟻  
這篇文章主要介紹了Java面試題 從源碼角度分析HashSet實現(xiàn)原理?,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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

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

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

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

源碼分析

先來看一下無參的構(gòu)造函數(shù):

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的絕大部分方法都是通過調(diào)用HashMap的方法來實現(xiàn)的,其他的方法,就請大家自己查閱一下源碼吧。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot數(shù)據(jù)庫密碼加密的配置方法

    springboot數(shù)據(jù)庫密碼加密的配置方法

    這篇文章主要給大家介紹了關(guān)于springboot數(shù)據(jù)庫密碼加密的配置方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Javaweb El表達式實例詳解

    Javaweb El表達式實例詳解

    EL全稱 Expression Language(表達式語言),這篇文章主要介紹了Javaweb El表達式實例詳解的相關(guān)資料,非常具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-05-05
  • SpringBoot+阿里云OSS實現(xiàn)在線視頻播放的示例

    SpringBoot+阿里云OSS實現(xiàn)在線視頻播放的示例

    這篇文章主要介紹了SpringBoot+阿里云OSS實現(xiàn)在線視頻播放的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java稀疏數(shù)組的應用實踐

    Java稀疏數(shù)組的應用實踐

    本文主要介紹了Java稀疏數(shù)組的應用實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java中數(shù)組和String相互轉(zhuǎn)換的幾種常見方法

    Java中數(shù)組和String相互轉(zhuǎn)換的幾種常見方法

    這篇文章主要介紹了Java中數(shù)組和String相互轉(zhuǎn)換的幾種常見方法,每種類型都有相應的轉(zhuǎn)換方法,如使用String類的構(gòu)造函數(shù)、toCharArray()、String.join()、Arrays.toString()、StringBuilder等,這些方法能幫助開發(fā)者高效地進行數(shù)據(jù)類型之間的轉(zhuǎn)換,需要的朋友可以參考下
    2025-04-04
  • 一文搞清楚Java中Comparable和Comparator的區(qū)別

    一文搞清楚Java中Comparable和Comparator的區(qū)別

    Java中的Comparable和Comparator都是用于集合排序的接口,但它們有明顯的區(qū)別,文中通過一些實例代碼詳細介紹了Java中Comparable和Comparator的區(qū)別,感興趣的同學跟著小編一起學習吧
    2023-05-05
  • SpringBoot基于redis自定義注解實現(xiàn)后端接口防重復提交校驗

    SpringBoot基于redis自定義注解實現(xiàn)后端接口防重復提交校驗

    本文主要介紹了SpringBoot基于redis自定義注解實現(xiàn)后端接口防重復提交校驗,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Springboot pom項目間接依賴包版本與預期不符原因解決分析

    Springboot pom項目間接依賴包版本與預期不符原因解決分析

    這篇文章主要介紹了Springboot pom項目間接依賴包版本與預期不符原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • DispatcherServlet處理器的適配和處理解析

    DispatcherServlet處理器的適配和處理解析

    這篇文章主要為大家介紹了DispatcherServlet的處理器的適配和處理流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • java實現(xiàn)對服務器的自動巡檢郵件通知

    java實現(xiàn)對服務器的自動巡檢郵件通知

    這篇文章主要為大家詳細介紹了java實現(xiàn)對服務器的自動巡檢郵件通知,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

新河县| 新郑市| 龙山县| 霍山县| 甘谷县| 淮阳县| 雅江县| 夏河县| 灵石县| 登封市| 东阿县| 体育| 留坝县| 留坝县| 鹿泉市| 邵武市| 新民市| 河东区| 南涧| 泸溪县| 偃师市| 称多县| 射洪县| 文成县| 布尔津县| 辽宁省| 榆社县| 阳春市| 陇川县| 涡阳县| 沅江市| 丰顺县| 慈利县| 舞钢市| 新余市| 九江市| 靖安县| 渝北区| 桐柏县| 南和县| 卫辉市|