检查密钥并获取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
}