HashMap方法大赏

本文深入讲解HashMap中的getOrDefault、putIfAbsent、compute、computeIfPresent及computeIfAbsent等方法的用法与区别,并通过示例代码展示如何在实际场景中灵活运用这些方法。

HashMap方法大赏

hashMap.getOrDefault()

获取指定 key 对应的 value,如果找不到 key ,则返回设置的默认值
返回 key 相映射的的 value,如果给定的 key 在映射关系中找不到,则返回指定的默认值。

hashMap.getOrDefault(Object key, V defaultValue);

示例(相同key):

Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
String orDefault = **map.getOrDefault("lisi", "赵六");**
System.out.println(orDefault);
System.out.println(map.toString());

结果:
在这里插入图片描述

示例(不同key):

Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
String orDefault = **map.getOrDefault("zhaoliu", "赵六");**
System.out.println(orDefault);
System.out.println(map.toString());

结果:
在这里插入图片描述

hashMap.putIfAbsent()

先判断指定的键(key)是否存在,不存在则将键/值对插入到 HashMap 中
如果所指定的 key 已经在 HashMap 中存在,返回和这个 key 值对应的 value, 如果所指定的 key 不在 HashMap 中存在,则返回 null。
注意:如果指定 key 之前已经和一个 null 值相关联了 ,则该方法也返回 null。

hashMap.putIfAbsent(K key, V value);

示例(相同key):

Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
**map.putIfAbsent("lisi", "赵六");**
System.out.println(map.toString());

结果:
在这里插入图片描述

示例(不同key):

Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
**map.putIfAbsent("zhaoliu", "赵六");**
System.out.println(map.toString());

结果:
在这里插入图片描述

hashMap.compute()

// 指定的key在map中的值进行操作 不管存不存在,操作完成后保存到map中
hashMap.compute(K key, BiFunction remappingFunction);
// 返回值:
//   如果 key 对应的 value 不存在,则返回该 null,如果存在,则返回通过 remappingFunction 重新计算后的值。
示例(相同key):
Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
map.compute("zhaoliu", (key, value) -> map.put("zhaoliu", "赵六"));
System.out.println(map.toString());

结果:
在这里插入图片描述

hashMap.computeIfPresent()

对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中
如果 key 对应的 value 不存在,则返回该 null,如果存在,则返回通过 remappingFunction 重新计算后的值。

hashmap.computeIfPresent(K key, BiFunction remappingFunction)

示例:

Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
map.computeIfPresent("lisi", (key, value) -> map.put("zhaoliu", "赵六"));
System.out.println(map.toString());

结果:
在这里插入图片描述

hashMap.computeIfAbsent()

对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hashMap 中
如果 key 对应的 value 不存在,则使用获取 remappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。

hashmap.computeIfAbsent(K key, Function remappingFunction)

示例:

Map<String, String> map = new HashMap<>();
map.put("zhangsan", "张三");
map.put("lisi", "李四");
map.put("wangwu", "王五");
map.computeIfAbsent("zhaoliu", (key) -> map.put("zhaoliu", "赵六"));
System.out.println(map.toString());

结果:
在这里插入图片描述

### Java HashMap 常用方法及用法示例 #### 创建HashMap对象 为了使用`HashMap`,首先需要导入`java.util.HashMap`包。接着可以实例化一个`HashMap`对象来存储键值对,其中键和值都可以指定为任何数据类型,在此例子中均为字符串类型。 ```java import java.util.HashMap; public class Main { public static void main(String[] args) { // 创建HashMap对象 HashMap<String, String> hashMap = new HashMap<>(); } } ``` #### 添加元素到HashMap 通过调用`put()`方法向`HashMap`中添加新的键值对。如果给定的键已经存在于映射中,则旧值会被新值替换。 ```java // 向HashMap中添加键值对 hashMap.put("key1", "value1"); hashMap.put("key2", "value2"); ``` #### 获取HashMap中的值 利用`get(Object key)`函数可以根据指定的关键字检索对应的值;若找不到匹配项则返回`null`[^3]。 ```java // 根据键获取对应值 String valueForKey1 = hashMap.get("key1"); // 返回"value1" System.out.println(valueForKey1); ``` #### 删除HashMap条目 要移除某个特定键所关联的映射关系可采用`remove(Object key)`方式实现。 ```java // 移除键为"key2"的记录 hashMap.remove("key2"); ``` #### 判断是否存在某键/值 可以通过`containsKey(Object key)`判断哈希表里是否有指定关键字;而`containsValue(Object value)`则是用来验证是否存在某一具体数值。 ```java boolean hasKey1 = hashMap.containsKey("key1"); // true boolean hasValue1 = hashMap.containsValue("value1"); // true 或 false 取决于当前状态 ``` #### 遍历HashMap 遍历整个集合有多种途径,这里展示一种基于增强型for循环的方式: ```java for (String key : hashMap.keySet()) { System.out.println(key + ": " + hashMap.get(key)); } ``` 或者更简洁地使用entrySet迭代器访问每一对键值组合: ```java for (var entry : hashMap.entrySet()) { System.out.println(entry.getKey() + "->" + entry.getValue()); } ``` #### 清空HashMap 最后,如果有需求清空所有的键值对,只需简单地执行一次`clear()`操作即可。 ```java hashMap.clear(); ``` 以上就是有关Java `HashMap`的一些基本概念及其常见API的应用场景介绍[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值