在填充哈希映射时规避空检查
在插入到哈希映射中时,我是否总是必须检查是否存在与要插入的密钥对应的空值?
例如,如果我想使用哈希映射跟踪一个字符在单词中出现的次数,我总是必须这样做:
if(hashMap.containsKey(ch)){
hashMap.replace(ch, 1+hashMap.get(ch));
}
else{
hashMap.put(ch, 1);
}
或者有没有一个函数可以为我处理这个问题?
在插入到哈希映射中时,我是否总是必须检查是否存在与要插入的密钥对应的空值?
例如,如果我想使用哈希映射跟踪一个字符在单词中出现的次数,我总是必须这样做:
if(hashMap.containsKey(ch)){
hashMap.replace(ch, 1+hashMap.get(ch));
}
else{
hashMap.put(ch, 1);
}
或者有没有一个函数可以为我处理这个问题?
使用合并
。
hashMap.merge(ch, 1, (left, right) -> left + right);
或使用方法引用:
hashMap.merge(ch, 1, Math::addExact);
ch
1
(left, right) -> left + right
您不必这样做。 具有可用于更新值的方法:Map
merge
hashMap.merge(ch, 1, (oldVal, newVal) -> oldVal + newVal);
它的作用:
hashMap
ch
ch
1
hashMap
ch
(oldVal, newVal) -> oldVal + newVal
正如Andy的评论中指出的那样,您也可以使用:Map.compute
int newValue = hashMap.compute(ch,
(key, existingVal) -> (existingVal == null) ? 1 : existingVal + 1);