0

0

Java Map如何实现默认值_Map默认值添加方案

P粉602998670

P粉602998670

发布时间:2025-12-26 14:41:02

|

762人浏览过

|

来源于php中文网

原创

Java Map获取不存在key时返回默认值有四种方式:1. computeIfAbsent(推荐,延迟初始化并缓存);2. getOrDefault(简单轻量,默认值每次创建);3. 封装DefaultMap类(统一默认策略);4. 结合Guava工具(函数式懒加载)。

java map如何实现默认值_map默认值添加方案

Java 的 Map 接口本身不支持“默认值”概念,但可以通过几种常用且实用的方式,在获取不存在的 key 时自动返回默认值,避免频繁判空或重复写默认逻辑。

使用 Map.computeIfAbsent() 动态设默认值

这是最推荐的方式之一,适用于“首次访问时按需创建并缓存默认值”的场景,比如构建嵌套结构、初始化对象等。

  • 只在 key 不存在时执行 supplier,线程安全(对 ConcurrentHashMap 有效)
  • 返回的是实际存入 map 的值(即默认值),后续 get 直接命中
  • 适合默认值创建开销较大、或需延迟初始化的情况

示例:

快打折淘宝客折扣系统(免API全自动采集)
快打折淘宝客折扣系统(免API全自动采集)

程序介绍: 《快打折淘宝客折扣系统V2.5 免API采集》是一款适用于淘宝客打折单品推广的程序,无论老手或新手都能短时间内赚取大量佣金的淘宝客网站程序,不同于现在广泛的淘宝客单品推广网站。本程序可手动添加商品,同时也配置强大的多功能采集插件,多种采集方案,内置9.9元、19.9元包邮采集规则,可采集评论,也可自定义采集规则,全自动无人值守采集更新网站,无需人工维护。默认提供精美的页面设计模版,超好

下载
Map> map = new HashMap();
map.computeIfAbsent("users", k -> new ArrayList()).add("Alice");

封装工具方法:getOrDefault() 的增强版

Map.getOrDefault(key, defaultValue) 是 JDK 8+ 内置方法,简单直接,但 defaultValue 每次调用都会被创建(即使 key 存在)。

立即学习Java免费学习笔记(深入)”;

  • 适合默认值是常量、轻量对象(如空字符串、0、Collections.emptyList())
  • 若默认值构造较重(如 new Date()、new ObjectMapper()),建议改用 computeIfAbsent 或自定义 getOrCompute
  • 可封装成静态工具方法,统一管理默认策略

示例:

String name = map.getOrDefault("name", "unknown"); // 安全取值

继承或包装 Map 实现“带默认值”的语义

若项目中大量需要某类默认行为(如所有 String 值默认为 "",数字默认为 0),可封装一个 DefaultMap 类。

  • 内部持有一个 delegate Map + 默认值 Supplier
  • 重写 get() 方法:先 delegate.get,为空则调用 supplier 获取并返回(不自动 put,保持无副作用)
  • 注意:不建议直接修改原 Map 接口行为,应明确命名(如 DefaultValueMap)避免误解

示例思路:

public class DefaultValueMap implements Map {
  private final Map delegate;
  private final Supplier defaultSupplier;
  // ...
  @Override public V get(Object key) {
    V v = delegate.get(key);
    return (v != null || delegate.containsKey(key)) ? v : defaultSupplier.get();
  }
}

使用 Guava 的 Maps.newHashMapWithExpectedSize() + 自定义逻辑

Guava 提供了更丰富的 Map 工具,例如 ImmutableMap.of()MapDifference,但它本身也不内置默认值。不过可以结合 Suppliers.memoize()Function 实现懒加载默认值。

  • 适合已引入 Guava 的项目,追求函数式风格
  • 例如:用 Functions.forMap(map, () -> "default") 包装后调用 apply(key)
  • 注意:Guava 的 Function.apply 不改变原 map,纯读取语义,适合只读场景

基本上就这些。核心原则是:轻量默认值用 getOrDefault,需缓存/初始化用 computeIfAbsent,高频统一需求可封装,默认值逻辑复杂或跨模块时建议显式处理而非隐式“魔改” Map 行为。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

651

2023.06.15

java流程控制语句有哪些
java流程控制语句有哪些

java流程控制语句:1、if语句;2、if-else语句;3、switch语句;4、while循环;5、do-while循环;6、for循环;7、foreach循环;8、break语句;9、continue语句;10、return语句。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

455

2024.02.23

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

725

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

394

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

441

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

427

2023.08.02

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2万人学习

C# 教程
C# 教程

共94课时 | 5.3万人学习

Java 教程
Java 教程

共578课时 | 37.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号