news 2026/5/1 7:25:40

java map<String,List>判断是否有key,get(key.add(x),否则put(key,new list(){x})的新写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java map<String,List>判断是否有key,get(key.add(x),否则put(key,new list(){x})的新写法

在Java中,你可以通过几种方式实现这个逻辑。以下是几种常见的实现方法:

方法1:传统方式(使用 containsKey)

Map<String, List<String>> map = new HashMap<>(); public void addValue(String key, String value) { if (map.containsKey(key)) { map.get(key).add(value); } else { List<String> newList = new ArrayList<>(); newList.add(value); map.put(key, newList); } }

方法2:使用 getOrDefault(Java 8+)

Map<String, List<String>> map = new HashMap<>(); public void addValue(String key, String value) { List<String> list = map.getOrDefault(key, new ArrayList<>()); list.add(value); map.put(key, list); }

方法3:使用 computeIfAbsent(推荐,Java 8+)

Map<String, List<String>> map = new HashMap<>(); public void addValue(String key, String value) { map.computeIfAbsent(key, k -> new ArrayList<>()).add(value); }

方法4:使用 putIfAbsent

Map<String, List<String>> map = new HashMap<>(); public void addValue(String key, String value) { map.putIfAbsent(key, new ArrayList<>()); map.get(key).add(value); }

完整示例

import java.util.*; public class MapExample { public static void main(String[] args) { // 使用方法3:computeIfAbsent(最简洁) Map<String, List<String>> map = new HashMap<>(); addToMap(map, "fruit", "apple"); addToMap(map, "fruit", "banana"); addToMap(map, "vegetable", "carrot"); addToMap(map, "fruit", "orange"); System.out.println(map); // 输出: {vegetable=[carrot], fruit=[apple, banana, orange]} } // 使用 computeIfAbsent public static void addToMap(Map<String, List<String>> map, String key, String value) { map.computeIfAbsent(key, k -> new ArrayList<>()).add(value); } }

针对不同类型 List 的通用方法

如果你需要处理不同类型的数据,可以使用泛型:

public class MapUtils { // 通用方法 public static <K, V> void addToListInMap(Map<K, List<V>> map, K key, V value) { map.computeIfAbsent(key, k -> new ArrayList<>()).add(value); } // 使用示例 public static void main(String[] args) { Map<String, List<Integer>> intMap = new HashMap<>(); Map<String, List<Double>> doubleMap = new HashMap<>(); Map<String, List<Object>> objectMap = new HashMap<>(); addToListInMap(intMap, "scores", 100); addToListInMap(doubleMap, "prices", 19.99); addToListInMap(objectMap, "items", "item1"); } }

线程安全版本

如果需要在多线程环境中使用:

Map<String, List<String>> concurrentMap = new ConcurrentHashMap<>(); public void addValueSafely(String key, String value) { // 使用 ConcurrentHashMap 的 computeIfAbsent concurrentMap.computeIfAbsent(key, k -> Collections.synchronizedList(new ArrayList<>()) ).add(value); }

推荐

推荐使用方法3(computeIfAbsent),因为:

  1. 代码最简洁

  2. 避免多次访问Map

  3. 性能较好

  4. 是原子操作(在多线程环境下更安全)

如果你使用的是Java 8之前的版本,可以使用方法1,虽然代码稍长,但兼容性最好。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:05:39

Airtest常用API介绍

今天就继续给大家介绍一下Airtest框架常用的核心API用法&#xff0c;这也是熟悉使用Airtest框架的必备手册之一。 (一&#xff09;官方文档 官方文档 https://airtest.doc.io.netease.com/IDEdocs/airtest_framework/1_airtest_api/ &#xff08;二&#xff09;核心API介绍…

作者头像 李华
网站建设 2026/4/17 1:23:06

国产突围与进口坚守:解读金相显微镜十大品牌新变局

金相显微镜是一种专门用于观察和分析金属及其合金微观结构的显微镜。它通过高倍放大的光学系统&#xff0c;帮助用户研究材料的金相组织、晶粒大小、相分布、缺陷&#xff08;如裂纹、气孔&#xff09;以及其它微观特征。目前行业内公认的国、内外一线/主流品牌大致集中在以下这…

作者头像 李华
网站建设 2026/4/25 10:54:05

医疗大模型LoRA微调实战:我用40行代码让AI学会看病

目录 &#x1f3af; 摘要 一、技术原理&#xff1a;为什么LoRA是医疗AI的救命稻草&#xff1f; 1.1 架构设计理念&#xff1a;别动基座&#xff0c;只加"外挂" 1.2 核心算法实现&#xff1a;矩阵拆解的魔法 1.3 性能特性分析&#xff1a;数据不说谎 二、实战部…

作者头像 李华
网站建设 2026/4/17 9:04:46

句句都不黄,[特殊字符]句句都很撩(贼上头)

&#x1f35a; 干饭要趁热&#xff0c;爱我要趁现在&#xff01;&#x1f964; 想喝奶茶三分糖&#xff0c;想你甜度超标啦&#xff5e;&#x1f6b6; 别问我去哪&#xff0c;心早就跑你那儿啦&#xff01;⏰ 闹钟叫不醒我&#xff0c;你一句想我就醒&#xff01;&#x1f4b0;…

作者头像 李华