提出问题
定义 HashMap 对象,并将 姓 作为key,姓名 作为value,放入到 HashMap 中
分析:考虑到同姓的人有很多,所以 value 是 List 类型。当放入 李雷 时,需要先判断是否存在 key 是 李的数据,分下面两种情况:
如果存在,就要取出 对应的
value(List) 类型,然后将 李雷 放入到List中。如果不存在,就需要创建
ArrayList,然后将 李雷 放入到List中,并将List放入到Map中
class Test{
Map<String,List<String>> map = new HashMap();
public void put(String name){
String xing = name.substring(0,1);
List<String> list = map.get(xing);
if(list==null){
list = new ArrayList();
map.put(xing,list)
}
list.add(name);
}
}
缺点
在 put() 方法中,需要取出 姓 对应的 value,该 value 是 List 类型,然后判断 List 是否为 null,如果为 null,需要先创建,然后再添加 姓名,代码写起来有点啰嗦
解决
使用 hashmap.computeIfAbsent() 方法
介绍
如果 key 对应的 value 不存在,则执行 remappingFunction 方法,该方法返回 新value,并将该 新value 放入 HashMap中,否则返回 value。
语法
hashmap.computeIfAbsent(K key, Function remappingFunction)
参数说明:
- key - 键
- remappingFunction - 重新映射函数,用于重新计算值
重写上面代码
class Test{
Map<String,List<String>> map = new HashMap();
public void put(String name){
String xing = name.substring(0,1);
List<V> list = this.targetMap.computeIfAbsent(key, k -> new ArrayList<>());
list.add(name);
}
}