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 直接命中
  • 适合默认值创建开销较大、或需延迟初始化的情况

示例:

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

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

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

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

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

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

下载
  • 适合默认值是常量、轻量对象(如空字符串、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 行为。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
guava包作用
guava包作用

guava是一个java库,增强了java标准库,提供更有效率和易于使用的集合、实用程序、缓存和并发工具。想了解更多guava的相关内容,可以阅读本专题下面的文章。

271

2024.05.29

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1565

2023.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1565

2023.10.24

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

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

精品课程

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

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.4万人学习

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

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