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()