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

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ù)元素,這是為什么呢,下面我們一起來(lái)研究一下,需要的朋友可以參考下

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)存中開(kāi)辟一塊空間。上一篇文章中我們說(shuō)到hashset的結(jié)構(gòu)是:哈希表:數(shù)組+鏈表/紅黑樹(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ì)在集合中找有沒(méi)有96354這個(gè)哈希值的元素。發(fā)現(xiàn)沒(méi)有,就會(huì)將元素abc存儲(chǔ)到集合中去。

在這里插入圖片描述

當(dāng)開(kāi)始存儲(chǔ)存儲(chǔ)s2時(shí),add方法回調(diào)用s2.hashCode()方法,計(jì)算字符串a(chǎn)bc的哈希值(96354)。就會(huì)在集合中找有沒(méi)有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ì)在集合中找有沒(méi)有1179395這個(gè)哈希值的元素。發(fā)現(xiàn)沒(méi)有,就會(huì)將元素重地存儲(chǔ)到集合中去。

在這里插入圖片描述

接下來(lái)我們就該存儲(chǔ)通話。add方法回調(diào)用通話.hashCode()方法,計(jì)算字符串通話的哈希值(1179395)。就會(huì)在集合中找有沒(méi)有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)文章

  • 關(guān)于Java中XML Namespace 命名空間問(wèn)題

    關(guān)于Java中XML Namespace 命名空間問(wèn)題

    這篇文章主要介紹了Java中XML Namespace 命名空間,XML命名空間是由國(guó)際化資源標(biāo)識(shí)符 (IRI) 標(biāo)識(shí)的 XML 元素和屬性集合,該集合通常稱作 XML“詞匯”,對(duì)XML Namespace 命名空間相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-08-08
  • 工作中禁止使用Executors快捷創(chuàng)建線程池原理詳解

    工作中禁止使用Executors快捷創(chuàng)建線程池原理詳解

    這篇文章主要為大家介紹了工作中禁止使用Executors快捷創(chuàng)建線程池原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 猜你不知道Spring Boot的幾種部署方式(小結(jié))

    猜你不知道Spring Boot的幾種部署方式(小結(jié))

    這篇文章主要介紹了猜你不知道Spring Boot的幾種部署方式(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • mybatis中嵌套使用foreach需要注意的坑

    mybatis中嵌套使用foreach需要注意的坑

    在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),如果需要在一個(gè)大的foreach標(biāo)簽中嵌套另一個(gè)foreach,需要注意內(nèi)層foreach的item屬性不能與外層重復(fù),如果出現(xiàn)重復(fù),會(huì)導(dǎo)致綁定參數(shù)時(shí)找不到正確的參數(shù),從而拋出異常
    2024-09-09
  • 利用Mybatis自定義排序規(guī)則實(shí)現(xiàn)復(fù)雜排序

    利用Mybatis自定義排序規(guī)則實(shí)現(xiàn)復(fù)雜排序

    本文主要介紹了利用Mybatis自定義排序規(guī)則實(shí)現(xiàn)復(fù)雜排序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Java實(shí)現(xiàn)的簡(jiǎn)單擲骰子游戲示例

    Java實(shí)現(xiàn)的簡(jiǎn)單擲骰子游戲示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單擲骰子游戲,涉及Java隨機(jī)數(shù)的簡(jiǎn)單生成、運(yùn)算與判定相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 使用Maven打包時(shí)排除指定的目錄或指定的類

    使用Maven打包時(shí)排除指定的目錄或指定的類

    在maven項(xiàng)目中,通過(guò)修改pom.xml文件,在maven-compiler-plugin的configuration>excludes節(jié)點(diǎn)下添加排除匹配條件,可以剔除掉生產(chǎn)包中的測(cè)試類,注意使用**表示多級(jí)目錄匹配,*表示一級(jí)目錄匹配
    2024-11-11
  • 鴻蒙中的設(shè)備權(quán)限管理與申請(qǐng)?jiān)敿?xì)示例代碼

    鴻蒙中的設(shè)備權(quán)限管理與申請(qǐng)?jiān)敿?xì)示例代碼

    在移動(dòng)應(yīng)用開(kāi)發(fā)中,權(quán)限管理是至關(guān)重要的一部分,尤其是在涉及用戶隱私或系統(tǒng)資源(如相機(jī)、位置、存儲(chǔ)等)的應(yīng)用中,這篇文章主要介紹了鴻蒙中的設(shè)備權(quán)限管理與申請(qǐng)的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • SpringBoot實(shí)現(xiàn)接口限流的常用方案

    SpringBoot實(shí)現(xiàn)接口限流的常用方案

    本文主要介紹SpringBoot項(xiàng)目的接口限流方案,市面上常用有2種限流方案漏桶和令牌桶,大家常用的都是令牌桶,本文也只實(shí)現(xiàn)了令牌桶的方案,需要的朋友可以參考下
    2025-08-08
  • 基于mybatis?plus實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)添加、刪除、切換,自定義數(shù)據(jù)源的示例代碼

    基于mybatis?plus實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)添加、刪除、切換,自定義數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了基于mybatis?plus實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)添加、刪除、切換,自定義數(shù)據(jù)源,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

黄石市| 永仁县| 松溪县| 恩平市| 格尔木市| 本溪市| 柳江县| 延川县| 和田市| 阿图什市| 澜沧| 湖南省| 民县| 柳河县| 英吉沙县| 婺源县| 山东省| 扶风县| 萨迦县| 临武县| 乐山市| 郑州市| 嵊泗县| 常州市| 绵竹市| 广丰县| 麻江县| 梁平县| 虎林市| 南通市| 中方县| 崇州市| 长葛市| 黑河市| 含山县| 贡嘎县| 剑川县| 班戈县| 婺源县| 黑水县| 长春市|