1. 概述

本文将介绍在 Kotlin 中初始化 Map 的几种常用方法。✅

核心内容包括:

  • 使用 mapOf 创建不可变 Map
  • 使用 mutableMapOf 创建可变 Map
  • 使用 hashMapOfsortedMapOflinkedMapOf 创建特定实现的 Map

这些方法属于 Kotlin 标准库中集合操作的一部分,简洁高效,是日常开发中高频使用的技巧。⚠️ 掌握它们有助于写出更地道的 Kotlin 代码,避免踩坑 Java 风格的冗长写法。

相关接口文档参考:Map

2. 使用 mapOf 创建不可变 Map

最常用的初始化方式是使用 mapOf 工厂函数。它用于创建一个不可变Map 实例,并支持直接传入键值对。

val mapWithValues = mapOf("Key1" to "Value1", "Key2" to "Value2", "Key3" to "Value3")

✅ 类型推断在这里非常友好 —— 编译器能自动推导出 Map<String, String> 类型,无需显式声明。

但如果你要创建一个空的不可变 Map,则必须指定泛型类型:

val mapWithoutValues = mapOf<String, String>()

这与直接使用 emptyMap() 效果一致:

val emptyMap = emptyMap<String, String>()

❌ 注意:一旦创建,mapOf 返回的 Map 无法添加、修改或删除元素,否则会抛出 UnsupportedOperationException

3. 使用 mutableMapOf 创建可变 Map

当需要后续修改 Map 内容时,应使用 mutableMapOf。它返回的是一个 MutableMap,支持增删改操作。

创建空可变 Map 并赋值:

val emptyMutableMap = mutableMapOf<String, String>()
emptyMutableMap["Key"] = "Value"

也可以在初始化时传入初始数据:

val mutableMap = mutableMapOf("Key1" to "Value1", "Key2" to "Value2", "Key3" to "Value3")
mutableMap["Key3"] = "Value10" // 修改已有值
mutableMap["Key4"] = "Value4" // 新增条目
mutableMap.remove("Key1")     // 删除键

✅ 这种方式灵活性高,适合配置缓存、动态参数收集等场景。

4. 使用 hashMapOf 创建 HashMap

若你明确希望底层使用 HashMap 实现(例如关注插入性能或兼容某些依赖 HashMap 特性的代码),可以使用 hashMapOf

val hashMap = hashMapOf("Key1" to "Value1", "Key2" to "Value2", "Key3" to "Value3")

hashMapOf 返回的是 Kotlin 封装的 HashMap,本质是可变的。

因此你可以自由修改:

hashMap["Key3"] = "Value10" // 修改
hashMap["Key4"] = "Value4" // 新增
hashMap.remove("Key1")     // 删除

⚠️ 虽然 mutableMapOf 在 JVM 上默认也返回 HashMap 实现,但使用 hashMapOf 更具语义清晰性,表明你确实依赖其具体行为(如非有序、允许 null 等)。

5. 使用 sortedMapOf 和 linkedMapOf 创建有序 Map

Kotlin 还提供了创建特定顺序 Map 的工厂函数,适用于对遍历顺序有要求的场景。

✅ sortedMapOf

创建一个按键排序的可变 SortedMap(基于红黑树):

val sortedMap = sortedMapOf("Key3" to "Value3", "Key1" to "Value1", "Key2" to "Value2")

遍历时会按 key 的自然顺序输出:Key1, Key2, Key3
也可传入自定义 Comparator 控制排序逻辑。

✅ linkedMapOf

创建一个 LinkedHashMap,保持插入顺序:

val linkedMap = linkedMapOf("Key3" to "Value3", "Key1" to "Value1", "Key2" to "Value2")

遍历时顺序与插入一致:Key3 → Key1 → Key2
非常适合用于实现 LRU 缓存或需要保留操作顺序的上下文。

💡 提示:虽然 mutableMapOf 在大多数情况下返回 LinkedHashMap,但这是实现细节,不应依赖。若需保证插入顺序,请显式使用 linkedMapOf

6. 总结

Kotlin 提供了丰富的 Map 初始化手段,开发者可根据需求选择最合适的方式:

方法 是否可变 顺序特性 典型用途
mapOf ❌ 不可变 无保证 常量配置、只读数据
mutableMapOf ✅ 可变 通常为插入顺序 通用可变映射
hashMapOf ✅ 可变 无顺序 明确需要 HashMap 行为
linkedMapOf ✅ 可变 插入顺序 记录操作顺序、LRU 缓存
sortedMapOf ✅ 可变 键排序 需要有序遍历的场景

✅ 最常用的是 mapOfmutableMapOf,简洁且符合大多数业务场景。

对于遗留系统或特殊需求(如序列化兼容、性能敏感路径),建议使用具体类型构造函数以增强可读性和控制力。

所有示例代码均可在 GitHub 获取:Baeldung Kotlin Tutorials - Collections


原始标题:Initialize a Map in Kotlin