欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Set集合不允許存儲(chǔ)重復(fù)元素的原理詳解

 更新時(shí)間:2023年09月18日 10:25:19   作者:禿頭不禿頭農(nóng)  
這篇文章主要介紹了Java中的Set集合不允許存儲(chǔ)重復(fù)元素的原理詳解,我們之前使用Set集合的時(shí)候發(fā)現(xiàn),Set集合的特點(diǎn)是不允許存儲(chǔ)重復(fù)元素,這是為什么呢,下面我們一起來研究一下,需要的朋友可以參考下

Set集合不允許存儲(chǔ)重復(fù)元素的原理詳解

代碼如下(示例):

//創(chuàng)建hashset集合對(duì)象
        HashSet<String> set = new HashSet<>();
        String s1=new String("abc");
        String s2=new String("abc");
        set.add(s1);
        set.add(s2);
        set.add("重地");
        set.add("通話");//兩個(gè)特殊的字符串
        set.add("abc");
        System.out.println(set);

我們可以看到,我向set集合中存儲(chǔ)了三次abc和兩個(gè)特殊字符串,我們可以看到打印結(jié)果:

在這里插入圖片描述

我們可以發(fā)現(xiàn),集合中只有重地,通話,abc。為什么會(huì)出現(xiàn)這樣的結(jié)果呢。

第一步:我們創(chuàng)建了一個(gè)hashset集合。

//創(chuàng)建hashset集合對(duì)象
        HashSet<String> set = new HashSet<>();

我們一定是在堆內(nèi)存中開辟一塊空間。上一篇文章中我們說到hashset的結(jié)構(gòu)是:哈希表:數(shù)組+鏈表/紅黑樹。我們可以看到:

在這里插入圖片描述

注意:set集合在調(diào)用add方法時(shí),會(huì)調(diào)用元素的hashcode和equals方法,判斷元素是否重復(fù)。 首先,我們向集合中存儲(chǔ)的第一個(gè)元素是s1

        set.add(s1);

add方法回調(diào)用s1.hashCode()方法,計(jì)算字符串a(chǎn)bc的哈希值(96354)。就會(huì)在集合中找有沒有96354這個(gè)哈希值的元素。發(fā)現(xiàn)沒有,就會(huì)將元素abc存儲(chǔ)到集合中去。

在這里插入圖片描述

當(dāng)開始存儲(chǔ)存儲(chǔ)s2時(shí),add方法回調(diào)用s2.hashCode()方法,計(jì)算字符串a(chǎn)bc的哈希值(96354)。就會(huì)在集合中找有沒有96354這個(gè)哈希值的元素。發(fā)現(xiàn)有,注意哈希值一樣就會(huì)發(fā)生哈希沖突。s2會(huì)調(diào)用equals方法和哈希值相同的元素進(jìn)行比較:s2.equals(s1),equals方法返回ture,認(rèn)定兩個(gè)元素相同,就不會(huì)把s2存儲(chǔ)到集合中。

之后我們就要存儲(chǔ)字符串重地:

        set.add("重地");

add方法回調(diào)用重地.hashCode()方法,計(jì)算字符串重地的哈希值(1179395)。就會(huì)在集合中找有沒有1179395這個(gè)哈希值的元素。發(fā)現(xiàn)沒有,就會(huì)將元素重地存儲(chǔ)到集合中去。

在這里插入圖片描述

接下來我們就該存儲(chǔ)通話。add方法回調(diào)用通話.hashCode()方法,計(jì)算字符串通話的哈希值(1179395)。就會(huì)在集合中找有沒有1179395這個(gè)哈希值的元素。發(fā)現(xiàn)有,就會(huì)調(diào)用equals方法進(jìn)行比較:”通話“.equals(“重地”),返回false,認(rèn)定兩個(gè)元素不相同,所以會(huì)將元素存儲(chǔ)在1179395同樣的位置上。

在這里插入圖片描述

這就是set元素存儲(chǔ)元素不重復(fù)的元素的原理。但是這有一個(gè)前提,存儲(chǔ)元素必須重寫hashcode和eqluas方法,保證元素不重復(fù)。

到此這篇關(guān)于Java中的Set集合不允許存儲(chǔ)重復(fù)元素的原理詳解的文章就介紹到這了,更多相關(guān)Set集合底層原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis映射文件mapper.xml的具體寫法

    mybatis映射文件mapper.xml的具體寫法

    在開發(fā)過程中,需要開發(fā)人員配置mapper映射文件,本文主要介紹了mybatis映射文件mapper.xml的具體寫法,感興趣的可以了解一下
    2021-09-09
  • MyBatis Plus中InnerInterceptor的實(shí)現(xiàn)

    MyBatis Plus中InnerInterceptor的實(shí)現(xiàn)

    本文主要介紹了MyBatis Plus中InnerInterceptor的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • IDEA?服務(wù)器熱部署圖文詳解(On?Update?action/On?frame?deactivation)

    IDEA?服務(wù)器熱部署圖文詳解(On?Update?action/On?frame?deactivation)

    這篇文章主要介紹了IDEA?服務(wù)器熱部署詳解(On?Update?action/On?frame?deactivation),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • java.io.NotSerializableException異常的問題及解決

    java.io.NotSerializableException異常的問題及解決

    這篇文章主要介紹了java.io.NotSerializableException異常的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot定時(shí)任務(wù)參數(shù)運(yùn)行代碼實(shí)例解析

    SpringBoot定時(shí)任務(wù)參數(shù)運(yùn)行代碼實(shí)例解析

    這篇文章主要介紹了SpringBoot定時(shí)任務(wù)運(yùn)行代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 解決Spring Cloud feign GET請(qǐng)求無法用實(shí)體傳參的問題

    解決Spring Cloud feign GET請(qǐng)求無法用實(shí)體傳參的問題

    這篇文章主要介紹了解決Spring Cloud feign GET請(qǐng)求無法用實(shí)體傳參的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • MySQL 新增字段但 Java 實(shí)體未更新存在潛在問題與解決方案

    MySQL 新增字段但 Java 實(shí)體未更新存在潛在問題與解決方案

    在 Java + MySQL 的開發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來映射數(shù)據(jù)庫表與 Java 對(duì)象,這篇文章主要介紹了MySQL 新增字段但 Java 實(shí)體未更新:潛在問題與解決方案,需要的朋友可以參考下
    2025-04-04
  • Java多線程中Lock的使用小結(jié)

    Java多線程中Lock的使用小結(jié)

    jdk1.5 以后,提供了各種鎖,本文主要介紹了Java多線程中Lock的使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java實(shí)現(xiàn)單向鏈表反轉(zhuǎn)

    Java實(shí)現(xiàn)單向鏈表反轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)單向鏈表反轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 深入理解Swift中的Substring和String

    深入理解Swift中的Substring和String

    這篇文章主要給大家深入的介紹了Swift中Substring和String的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評(píng)論