hashmap中的key可以重复吗,hashmap可以存储相同的key吗
目录
HashMap插入相同的keyHashMap插入我的问题和想法的描述。你能重复HashMap的键吗?让我们看看实际的代码,直奔主题。
HashMap插入相同key
00-1010用HashMap插入时,会用equal方法来判断键是否相同。如果相同,对应的值;将被覆盖;只有在不同的情况下才使用新的“铲斗”。
00-1010在HashMap中插入数据时,即使有相同的键,是否可以将新值放在原始值附近,而不是覆盖它?
00-1010 Er其实大方向是通过一个HashMapInteger,ArrayList来实现。
粘贴代码
导入Java . util . ArrayList;导入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,地图);put(1,3,map);system . out . println(map . tostring());} public static void put(Integer key,Integer str,HashMapInteger,ArrayList map){ ArrayListInteger list=map . get(key);if(list==null)list=new ArrayList();for(int I=0;I list . size();i){ if(list.get(i)。equals(str))返回;} list . add(str);map.put(key,list);}}然后粘贴输出结果。
{1=[1, 3], 2=[2], 3=[4]}
00-1010今天测试同学问我一个bug。我阅读了错误描述,并很快找到了错误问题的原因。乍一看,我很惊讶。HashMap的键不应该重复。为什么我放了两把一样的钥匙?map中存储了两个完全相同的键值,真的很奇怪。
HashMap插入的描述
公众调查周{周三;} public class T { public static void main(String[]args){ Map a=new HashMap();//枚举类型的wed a . put(week . wed, Tuesday );A.put(WED ,星期三);system . out . println(a);}}我们来调试一下,看看这个图返回的结果:
你看到结果了吗,两把一模一样的钥匙?看到这里,我有点疑惑。这时我马上想到了Hashmap的底层实现,其中put方法的底层是调用putVal(has(key),Val,),而密钥是通过hascode()由传入的参数计算出来的。因为两个相同的键存储在映射中,所以它们的hascodes必须不同。如果继续看has()方法的底部,实际上调用的是传入对象。hascode()。这时答案已经浮出水面,问题出在我传入的两个键的类型上。虽然枚举的WED和String的值表面上是一样的,但是它们对应的类型是String和Enum。这时,如果我们继续查看源代码,我们可以找到那个字符串和
从这里我们可以看到,map中实际存储的键是我们的枚举类Week,而另一个是String类型的String。既然知道了问题的原因,就有了相应的解决办法。
我们知道在使用枚举类型的时候,如果没有指定枚举中常量的值,默认情况下会直接返回常量名,但是返回的名字不是字符串类型,而是枚举类型,所以在使用枚举类型的时候一定要注意。
00-1010判断常量值是否相等时,要么重新赋值方法,要么使用名称()。toString()方法进行检查。另外,当我们使用HashMap时,如果不指定?还有键值的类型,切记不要想当然的认为你看到的键是一样的,存储的键一定是一样的。结论:Hashmap中的key是不允许重复的,我们看到的重复只是程序欺骗了我们的眼睛。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。