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

Java中的Set集合不允許存儲重復元素的原理詳解

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

Set集合不允許存儲重復元素的原理詳解

代碼如下(示例):

//創(chuàng)建hashset集合對象
        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("通話");//兩個特殊的字符串
        set.add("abc");
        System.out.println(set);

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

在這里插入圖片描述

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

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

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

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

在這里插入圖片描述

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

        set.add(s1);

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

在這里插入圖片描述

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

之后我們就要存儲字符串重地:

        set.add("重地");

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    使用Maven打包時排除指定的目錄或指定的類

    在maven項目中,通過修改pom.xml文件,在maven-compiler-plugin的configuration>excludes節(jié)點下添加排除匹配條件,可以剔除掉生產(chǎn)包中的測試類,注意使用**表示多級目錄匹配,*表示一級目錄匹配
    2024-11-11
  • 鴻蒙中的設備權(quán)限管理與申請詳細示例代碼

    鴻蒙中的設備權(quán)限管理與申請詳細示例代碼

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

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

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

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

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

最新評論

抚顺县| 新沂市| 贡嘎县| 历史| 遂川县| 昔阳县| 睢宁县| 湖南省| 上林县| 开鲁县| 东港市| 苏尼特左旗| 中牟县| 崇信县| 沧州市| 玉田县| 通渭县| 麟游县| 靖远县| 根河市| 芷江| 庆城县| 德钦县| 鄂温| 当雄县| 邓州市| 海门市| 乾安县| 宁强县| 灵武市| 丹江口市| 金寨县| 宁城县| 江北区| 杭锦旗| 昌宁县| 德钦县| 青浦区| 宝兴县| 磴口县| 平远县|