检查密钥并获取Java映射的单个操作
我想检查检查密钥并获取Java映射的单个操作,java,map,primitive,Java,Map,Primitive,我想检查Map是否包含特定的键。如果它存在于映射中则检索其相应的值。但它需要两个操作,如下所示。首先使用containsKey()检查钥匙是否存在。以及使用get()进行检索的第二个操作 因此,我将int替换为Integer,这样我就可以捕获从get()返回的值,并检查它是否为null。如果为空,则跳过If块,否则执行块内的代码。我不确定这样做是否正确,即使用对象引用数据类型代替原语数据类型,以最小化地图上的多次查询。这一方法的任何替代方案 Integer value; if((
Map
是否包含特定的键
。如果它存在于映射中
则检索其相应的值。但它需要两个操作,如下所示。首先使用containsKey()
检查钥匙是否存在。以及使用get()
进行检索的第二个操作
因此,我将int
替换为Integer
,这样我就可以捕获从get()
返回的值,并检查它是否为null
。如果为空,则跳过If
块,否则执行块内的代码。我不确定这样做是否正确,即使用对象引用
数据类型代替原语
数据类型,以最小化地图上的多次查询。这一方法的任何替代方案
Integer value;
if((value = pageMap.get(key)) != null){
//execute code
}
使用Java 8+时,您可以使用:
int value = pageMap.getOrDefault(key, 0);
您的代码是正确的,但我更愿意将其编写为:
Integer value = pageMap.get(key);
if (value != null) {
// do something
}
映射真正包含的是对
Integer
对象的引用,因此除了库调用更少外,还有更少的“魔力”一般来说,这里是这样的。但是每次用int
数据类型替换value
时,是否都会有取消装箱的开销。如果您想多次使用该值,我建议只取消装箱一次。您只是为了降低可读性而进行了一些轻微的优化。确保这是值得优化的。大多数情况下,情况并非如此。我建议您选择可读选项,并且只有在确定了特定瓶颈后才重写。早期优化通常会产生难以阅读的代码,通常不会遇到实际的瓶颈。别忘了,map.containsKey首先可能是一个非常快速的查找。
Integer value = pageMap.get(key);
if (value != null) {
// do something
}