热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在填充HashMap时绕过空检查

如何解决《在填充HashMap时绕过空检查》经验,为你挑选了2个好方法。

插入哈希映射时,是否总是要检查是否存在与要插入的密钥对应的空值?

例如,如果我想跟踪字符出现在单词中的次数,使用hashmap,我是否总是这样做:

if(hashMap.containsKey(ch)){
    hashMap.replace(ch, 1+hashMap.get(ch));    
}
else{
    hashMap.put(ch, 1);    
}

或者有一个功能可以为我处理这个?



1> Ousmane D...:

使用merge.

hashMap.merge(ch, 1, (left, right) -> left + right);

或使用方法参考:

 hashMap.merge(ch, 1, Math::addExact);

如果指定的键(ch在这种情况下)尚未与值关联或与null关联,则将其与给定的非空值(1在本例中)相关联.

如果指定的键与非空值相关联,则它将相关值替换为给定重映射函数的结果(left, right) -> left + right.



2> ernest_k..:

你不必.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);


你也可以使用`compute`(我认为合并是使用它实现的).
推荐阅读
author-avatar
桑倪娜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有