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

HashMap插入相同key問題

 更新時間:2022年05月07日 10:40:30   作者:古鎮(zhèn)黃渤  
這篇文章主要介紹了HashMap插入相同key問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

HashMap插入相同key

HashMap插入的描述

使用HashMap在插入操作時,會通過equal方法判斷key是否相同。如果相同,則將覆蓋對應(yīng)的value;不相同才使用新的“桶”。

我的問題

當(dāng)往HashMap中插入數(shù)據(jù),即使有相同的key,但是能不能不進行覆蓋操作,而是把新的value放在原有的value附近能夠找到的位置?

想法

呃,其實大概方向就是通過一個HashMap<Integer, ArrayList>實現(xiàn)。。。

貼上代碼

import java.util.ArrayList;
import java.util.HashMap;?
public class MapAndLink {?
? ? public static void main(String[] args){?
? ? ? ? HashMap<Integer, ArrayList> map = new HashMap<>();
? ? ? ? put(1, 1, map);
? ? ? ? put(1, 3, map);
? ? ? ? put(2, 2, map);
? ? ? ? put(3, 4, map);
? ? ? ? put(1, 3, map);
? ? ? ? System.out.println(map.toString());
? ? }
?
? ? public static void put(Integer key, Integer str, HashMap<Integer, ArrayList> map){
? ? ? ? ArrayList<Integer> list = map.get(key);
? ? ? ? if(list == null)
? ? ? ? ? ? list = new ArrayList();
? ? ? ? for(int i = 0; i < list.size(); ++i){
? ? ? ? ? ? if(list.get(i).equals(str))
? ? ? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? list.add(str);
? ? ? ? map.put(key, list);
? ? }?
}

再貼上輸出結(jié)果

{1=[1, 3], 2=[2], 3=[4]}

HashMap的key能不能重復(fù)

今天測試同學(xué)給我提了一個bug,我看了bug描述很快定位了bug問題原因,乍一看這個問題的時候我當(dāng)時很驚訝,HashMap的key應(yīng)該是不允許重復(fù)的啊,為啥我put了兩個一樣的key,map中居然存入了兩個一模一樣個的key值,真是奇了怪了

我們看看實際代碼

public enum Week {    
    WED;  
}
public class T {
    public static void main(String[] args) {
        
        Map a = new HashMap();
        // 枚舉類型的一個 WED
        a.put(Week.WED, "星期二");        
        a.put("WED", "星期三");        
        System.out.println(a);
    }
}

我們debug看一下這個map的返回結(jié)果:

看到結(jié)果沒有,兩個一模一樣的key,看到這里我就稍稍有一點懵了,這時我馬上想到了Hashmap的底層實現(xiàn),其中put方法的底層是調(diào)用putVal(has(key),val,....),key是由傳入的參數(shù)經(jīng)過hascode()計算得出的,既然map里存了兩個相同的key,那么它們的hascode一定是不相同的,繼續(xù)看has()方法的底層,實際就是調(diào)用了傳入這個Object.hascode(),這時其實答案就已經(jīng)浮出水面了,問題點就是出在我傳入的兩個key的類型上,雖然我們表面看枚舉WED和字符串的值是相同的,可是它們對應(yīng)的類型一個是String,一個是Enum,這時候我們繼續(xù)看源碼可以發(fā)現(xiàn),String和Enum的hascode是完全不同的

從這里我們可以看出來,實際我們存入map中的key是我們的枚舉類Week,而另一個則是String類型的一個字符串,既然知道了問題的原因,那么我們就有了相應(yīng)的解決辦法。

我們知道在使用枚舉類型時,如果不指定枚舉中常量的值,默認(rèn)是直接返回這個常量name的,但是返回的這個name并不是String類型,而是一個Enum類型,所以在使用枚舉類型時候一定要注意。

說下重點

  • 在判斷常量值是否相等的時候,要么重新value方法,要么使用name().toString()方法來進行校驗。
  • 除此之外,我們在使用HashMap的時候,如果在不指定<?,?>key和value的類型的時候,切記不要想當(dāng)然的認(rèn)為看到的key相同,存入的key就一定是相同的。

結(jié)論:Hashmap中的key是不允許重復(fù)的,我們看到的重復(fù)只是程序欺騙了我們的雙眼。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 圖解Springboot集成七牛云并實現(xiàn)圖片上傳功能過程

    圖解Springboot集成七牛云并實現(xiàn)圖片上傳功能過程

    在實際開發(fā)中 ,基本都會有應(yīng)用到文件上傳的場景,但隨著或多或少的需求問題,之前有在springboot上用過七牛云實現(xiàn)圖片上傳,今天因為某些原因又重新使用了下七牛云因此想總結(jié)下七牛云
    2021-11-11
  • Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原因分析

    Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原

    這篇文章主要介紹了Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原因,本文給大家分享詳細(xì)解決方案,需要的朋友可以參考下
    2023-04-04
  • 將Java項目打包成可執(zhí)行的jar包

    將Java項目打包成可執(zhí)行的jar包

    這篇文章主要介紹了將Java項目打包成可執(zhí)行的jar包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java局部內(nèi)部類原理與用法實例分析

    Java局部內(nèi)部類原理與用法實例分析

    這篇文章主要介紹了Java局部內(nèi)部類原理與用法,結(jié)合實例形式分析了Java局部內(nèi)部類功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Spring?boot框架JWT實現(xiàn)用戶賬戶密碼登錄驗證流程

    Spring?boot框架JWT實現(xiàn)用戶賬戶密碼登錄驗證流程

    這篇文章主要介紹了Springboot框架JWT實現(xiàn)用戶賬戶密碼登錄驗證,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題

    jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題

    這篇文章主要介紹了jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02
  • java使用swing繪制國際象棋棋盤

    java使用swing繪制國際象棋棋盤

    這篇文章主要為大家詳細(xì)介紹了java使用swing繪制國際象棋棋盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Object類toString()和equals()方法使用解析

    Object類toString()和equals()方法使用解析

    這篇文章主要介紹了Object類toString()和equals()方法使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java關(guān)于遠程調(diào)試程序教程(以Eclipse為例)

    Java關(guān)于遠程調(diào)試程序教程(以Eclipse為例)

    這篇文章主要介紹了Java關(guān)于遠程調(diào)試程序教程(以Eclipse為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Spring @Order注解使用詳解

    Spring @Order注解使用詳解

    注解@Order或者接口Ordered的作用是定義Spring IOC容器中Bean的執(zhí)行順序的優(yōu)先級,而不是定義Bean的加載順序,Bean的加載順序不受@Order或Ordered接口的影響
    2022-08-08

最新評論

芒康县| 南和县| 沅陵县| 崇礼县| 红桥区| 绥棱县| 博野县| 石阡县| 桂平市| 东阳市| 石河子市| 五大连池市| 黄冈市| 石台县| 原平市| 黑水县| 当阳市| 石家庄市| 金塔县| 荣昌县| 五原县| 合江县| 涞源县| 莱芜市| 武定县| 巴彦县| 正阳县| 合川市| 旬阳县| 和林格尔县| 怀集县| 清水县| 扎兰屯市| 自贡市| 丽江市| 九龙城区| 卢湾区| 舒兰市| 依兰县| 濮阳县| 黎川县|