java中判断map<String,List>是否有key的四种方法

 更新时间:2025年12月26日 08:46:18   作者:悟能不能悟  
这篇文章主要为大家详细介绍了java中判断map<String,List>是否有key的四种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

在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),因为:

  • 代码最简洁
  • 避免多次访问Map
  • 性能较好
  • 是原子操作(在多线程环境下更安全)

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

到此这篇关于java中判断map<String,List>是否有key的四种方法的文章就介绍到这了,更多相关java判断map<String,List>是否有key内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot 实现CAS Server统一登录认证的详细步骤

    SpringBoot 实现CAS Server统一登录认证的详细步骤

    ​ CAS(Central Authentication Service)中心授权服务,是一个开源项目,目的在于为Web应用系统提供一种可靠的单点登录,这篇文章主要介绍了SpringBoot 实现CAS Server统一登录认证,需要的朋友可以参考下
    2024-02-02
  • 完美解决idea无法搜索下载插件的问题

    完美解决idea无法搜索下载插件的问题

    这篇文章主要介绍了完美解决idea无法搜索下载插件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java中运算符使用步骤(超详细!)

    java中运算符使用步骤(超详细!)

    Java中的运算符是编程语言中最基本的组成部分,对于数据的操作和处理起着至关重要的作用,这篇文章主要介绍了java中运算符使用步骤的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • SpringBoot2.1 RESTful API项目脚手架(种子)项目

    SpringBoot2.1 RESTful API项目脚手架(种子)项目

    这篇文章主要介绍了SpringBoot2.1 RESTful API项目脚手架(种子)项目,用于搭建RESTful API工程的脚手架,只需三分钟你就可以开始编写业务代码,不再烦恼于构建项目与风格统一,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • IntelliJ IDEA窗口组件具体操作方法

    IntelliJ IDEA窗口组件具体操作方法

    IDEA刚接触不久,各种常用工具窗口找不到,不小心关掉不知道从哪里打开,今天小编给大家分享这个问题的解决方法,感兴趣的朋友一起看看吧
    2021-09-09
  • 如何利用Spring的@Import扩展点与spring进行无缝整合

    如何利用Spring的@Import扩展点与spring进行无缝整合

    这篇文章主要介绍了如何利用Spring的@Import扩展点与spring进行无缝整合的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java快速生成PDF文档的实例代码

    Java快速生成PDF文档的实例代码

    在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享,而使用Java生成PDF文档也成为了一个非常重要的技能,所以本文我们将为您介绍如何使用Java快速生成PDF文档,需要的朋友可以参考下
    2023-09-09
  • 基于Java实现多线程下载并允许断点续传

    基于Java实现多线程下载并允许断点续传

    这篇文章主要介绍了基于Java实现多线程下载并允许断点续传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • MyBatis的mapper.xml文件热加载功能实现方案

    MyBatis的mapper.xml文件热加载功能实现方案

    文章分析了Arthas无法直接热替换MyBatis的mapper.xml文件的限制,并提出了多种变通方法来实现类似效果,这些方法包括结合MyBatis的热加载功能、使用Arthas和类重加载、动态刷新MappedStatement等,文章还建议在不同环境中使用不同的解决方案,需要的朋友可以参考下
    2026-02-02
  • 详解Java语言中一个字符占几个字节?

    详解Java语言中一个字符占几个字节?

    这篇文章主要介绍了Java语言中一个字符占几个字节,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论