问题HashMap方法putIfAbsent如何能够以比之前调用containsKey(x)更快的方式有条件地执行放置?例如,如果您不使用putIfAbsent,您可以使用:if(!map.containsKey(x)){map.put(x,someValue);}我之前认为putIfAbsent是调用containsKey后跟一个HashMap的便捷方法。但在运行基准测试后,putIfAbsent比使用containsKey后跟Put快得多。我查看了java.util源代码以尝试了解这是如何实现的,但它对我来说有点太神秘了,无法弄清楚。有谁在内部知道putIfAbsent似乎如何在更
我有一个HashMap称为vertexIndexes.如果我用这段代码遍历它:publicbooleansearch(StringvertexName){for(Vertexname:vertexIndexes.keySet()){Stringkey=name.toString();Stringvalue=vertexIndexes.get(name).toString();System.out.println(key+""+value+""+(name.hashCode()==vertexName.hashCode())+""+name.equals(vertexName));}..
为什么在HashMap上调用containsKey比get慢?测试:http://ideone.com/QsWXF(>15%的差异,在sun-jdk-1.6.0.17上运行) 最佳答案 因为它[稍微]做了更多工作,请参阅theOpenJDK7source.请注意containsKey调用getEntry而get直接“进行魔术查找”。我不知道为什么这样做,并且对getForNullKey的使用/不使用感到更加困惑:请参阅JohnB和TedHopps的评论,了解为什么会这样完成。get有一个针对空键的早期代码拆分(请注意,如果条目不存在
我有一个要放入HashMap中的颜色类。我想在hashmap上调用containsKey以确保该对象是否已经存在于hashmap中颜色类publicclassColor{publicStringname;Color(Stringname){this.name=name;}//getterssettersforname}HashMapHashMap>m=newHashMap>();Colorc=newColor("red");m.put(c,newArrayList());Colorc1=newColor("red");System.out.println(m.containsKey(c
在Java中,有一个HashMap完全填充了这种形式的数据:HashMapmap=newHashMap(1000000,1);检查随secret钥是否存在时速度更快,比如100:if(map.get(100)==null))或if(!map.containsKey(100))?从微观优化的角度来看,这个问题很有趣。 最佳答案 containsKey应该非常轻微慢,因为它会导致额外的函数调用(它只调用getEntry)(它可以得到优化离开,我不确定Java是否会这样做)。containsKey看起来像:publicbooleancon
我最近遇到了一个错误,我有一个键类型为Long的Map,但我试图将它与类型为String的键一起使用。我基本上有类似的东西:Mapmap;...StringwrongType;if(map.containsKey(wrongType)){//Dosomething}else{//Dosomethingdifferent}因为映射中的所有键都是Long类型,代码总是执行elseblock。由于containsKey和get方法采用Object类型的参数,因此可以毫无怨言地接受任何旧类型的对象。我的困惑源于同一实体在我们的系统中以两种不同的方式表示(有时作为Long,有时作为String)
我想省去一些重复的工作,写一个模仿Java的函数.containsKey()方法。基本上我想要这样的东西:usingnamespacestd;mapmymap;if(!contains(mymap,"keyasstring"))cout在C++中,可以通过以下方式检查映射是否包含键:m.find(str)!=m.end();我想编写一个通用方法,如果键包含在映射中则返回true。到目前为止,我有以下内容:templateinlineboolcontains(conststd::mapm,constA&str){returnm.find(str)!=m.end();}当我在map上运行它
这是发生崩溃的行offsetDuration=duration-(offsets.containsKey(freq)?offsets.get(freq):0l);我通过捕获Exception获得的值并转储变量,longoffsetDuration=0;longduration=391144;TreeMapoffsets={0=4024974.0,1036800=8588.0,1190400=88216.0,1267200=49763.0,1497600=87476.0,1574400=7469.0,1728000=54553.0,1958400=60512.0,2265600=2469
我正在使用HashMap:byte[]键和字符串值。但我意识到,即使我通过使用放置相同的对象(相同的字节数组和相同的字符串值)myList.put(TheSameByteArray,TheSameStringValue)进入HashMap,表还是插入了一个新的HashMapEntry不同的对象。那么函数containsKey()就不能工作了。有人可以为我解释一下吗?我怎样才能解决这个问题?谢谢。(安卓Java)@OverridepublicbooleancontainsKey(Objectkey){if(key==null){returnentryForNullKey!=null;}i
我在用gradle构建我的Android项目时遇到了这个错误。它大约每周发生一次。FAILURE:Buildfailedwithanexception.*Whatwentwrong:Failedtocapturesnapshotofinputfilesfortask':xxxxxxxx:compileDebugAidl'property'importDirs'duringup-to-datecheck.>CannotinvokemethodcontainsKey()onnullobject*Try:Runwith--stacktraceoptiontogetthestacktrace.