首页 > 编程知识 正文

map获取key不存在会不会报错,map判断key是否存在的方法

时间:2023-05-04 19:03:31 阅读:57359 作者:4461

首先,我祝贺你的疏忽遇到了和我一样的问题。 其实,通过标题可以看出,map在键和值一致时会通过hash和equal的方法。 遇到漏洞的主要疑问是key的值相同却找不到与他对应的value。 这个问题不注意其实很容易遇到。 不仅因为今天的疏忽浪费了很多时间,而且很久没有写博客了,所以我想在文章的结尾贴上这次的bug

现在进行错误的再生

classdemoapplicationtests { @ data @ allargsconstructorclassdept { privateintegerdeptid; 私有字符串深度名称; } @Test void test0() longkey=newlong ) ) 2; //方法确定调用booleanresult=this.methond(key )的log.info('map中是否存在key=2,结果={},result ); 判断//map中是否存在key=2,结果=false } privatebooleanmethond (long key ) listdeptdeptlist=newArraylist )4); for(intI=4; i0; I-- } { dept dept=new dept (new integer (I ),newstring('Zhangsan'I ) }; ept list.add (深度; } log.info ('数组deptList={} ',deptList ); //数组dept list=[//demoapplicationtests.dept (deptid=4,deptName=zhangsan4), //demoappplicationtests.dept ) ) demoapplicationtests ) ) dept ) 65//demoapplicationtests.dept (deptid=2,DDD //demoapplicationtests.dept ) deptid=1,deptnammontests ) ) deptid=1, deptnamonamontest stringdeptmap=dept list.stream (.collect ) collectors.tomap ) dept33603360getdeptid,dept :3360 gect 转动//dept map={1=zhangsan 1,2=zhangsan 2,3=zhangsan 3,4=zhangsan4} returndeptmap.contains key (key ); } }映射中有key=2,value=zhangsan2,但是我给了2试着找了一下,但是没有找到。 从源代码中可以看到containKey方法在执行hash后判断key值是否相等。 源代码:

/* * returnsttrue/ttifthismapcontainsamappingforthe * specified key.* @ paramkeythekeywhosepresenceinthismapistobeteses @ ttifthismapcontainsamappingforthespecified * key.*/publicbooleancontainskey { object key } {返回getnode }=null; }自己测试一下吧

@Test void test () ) longa=newlong ) ) 2; integerb=newinteger(2; log.info ('判断hash是否相等={} )、a.hashCode )==b.hashCode ); 判断混列是否相等=true log.info (判断a.equals是否相等={}、a.equals ) b ) ); 判断//equals是否相等=false }他们的混列相等,但对象类型不同,所以在equals的时刻直接为false

//Long对象的equals源代码: publicbooleanequals(objectobj ) if ) objinstanceof//Long ) return value==((long ) obj ) }而且,在最后这段源代码中,我们也知道处理方法的技术是使用. longValue (或. intValue )将他们转换为基本类型。 这样就可以判断了。 软件包类的转换请由基础自己选择。 具体操作:

@Test void contextLoads () longkey=newlong ) ) 2; boolean result=this.met hond (密钥; log.info('map中是否存在key=2,结果={},result ); 判断//map中是否存在key=2,结果=true } privatebooleanmethond (long key ) listdeptdeptlist=newArraylist )4); for(intI=4; i0; I-- } { dept dept=new dept (new integer (I ),newstring('Zhangsan'I ) }; ept list.add (深度; } log.info ('数组deptList={} ',deptList ); MapInteger,stringdeptmap=dept list.stream (.collect (collectors.to map ) dept:3360getdeptid,dept 3360360 gept id lid returndeptmap.contains key (key.intvalue ) ); }今日微服务开发中bug的真实场景代码

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。