Java中创建Map的做法

1. 使用构造函数创建

这是最直接的方式,通过new关键字实例化具体的Map实现类

java 复制代码
// 创建一个空的Map,无序,允许null键和值
Map<String, String> map = new HashMap<>();

// 创建一个带有初始容量的HashMap
Map<String, Integer> map2 = new HashMap<>(32);

// 创建一个LinkedHashMap(保持插入顺序)
Map<String, Integer> map3 = new LinkedHashMap<>();

2. 使用双括号初始化

注意会产生匿名内部类,不建议在大型项目或序列化场景中使用

java 复制代码
Map<String, Integer> map = new HashMap<>() {{
	put("apple", 1);
	put("banana", 2);
}};

3. 从现有集合复制数据创建

如果已有一个Map或者需要基于现有数据进行操作,可以使用拷贝构造函数

java 复制代码
Map<String, Integer> originalMap = new HashMap<>();
originalMap.put("key", 100);

// 复制到map中
Map<String, Integer> copyMap = new HashMap<>(originalMap);

4. 使用 Java 9+ 的工厂方法(推荐用于不可变集合)

如果你的数据在创建后不需要修改,Java 9 引入了非常优雅的静态工厂方法,返回的是不可变 Map(Immutable Map)。

java 复制代码
// 创建少量元素的不可变 Map
Map<String, Integer> immutableMap = Map.of("apple", 1, "banana", 2);

// 创建包含多个元素的不可变 Map
Map<String, Integer> anotherMap = Map.ofEntries(
    Map.entry("apple", 1),
    Map.entry("banana", 2),
    Map.entry("orange", 3)
);

5. 使用 Collections.unmodifiableMap() 包装为只读 Map

如果你想保留原 Map 的可变性,但对外提供一个"只读"视图,防止外部误修改:

java 复制代码
Map<String, Integer> mutableMap = new HashMap<>();
mutableMap.put("key", 1);

// 包装为只读 Map,任何 put/remove 操作都会抛出 UnsupportedOperationException
Map<String, Integer> readOnlyMap = Collections.unmodifiableMap(mutableMap);

总结建议:

  • 日常开发:首选 new HashMap<>() 或 new LinkedHashMap<>()。
  • 需要排序:选择 new TreeMap<>()。
  • 固定不变的配置/常量:优先使用 Java 9+ 的 Map.of()
相关推荐
小的~~1 天前
ThreadLocal 、InheritableThreadLocal 与 TransmittableThreadLocal 的进阶指南
java·开发语言
北极糊的狐1 天前
钉钉小程序报错data.formatTime is not a function是因为 axml 模板中不能直接调用 Page 内自定义方法!
java·小程序·钉钉
·薯条大王1 天前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO1 天前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆1 天前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光1 天前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林1 天前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu1 天前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官2 天前
Sa-Token和Spring Security对比
java·后端·spring