Kotlin Map 集合 #

一、创建 Map #

1.1 只读 Map #

kotlin
// 使用 mapOf
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

// 空映射
val empty = emptyMap<String, Int>()

// 使用 LinkedHashMap(保持插入顺序)
val linked = linkedMapOf("a" to 1, "b" to 2)

// 使用 TreeMap(按键排序)
val sorted = sortedMapOf("c" to 3, "a" to 1, "b" to 2)

// 使用 HashMap
val hash = hashMapOf("a" to 1, "b" to 2)

1.2 可变 Map #

kotlin
// 使用 mutableMapOf
val mutable = mutableMapOf("a" to 1, "b" to 2)

// 使用 hashMapOf
val hash = hashMapOf("a" to 1, "b" to 2)

// 使用 linkedMapOf
val linked = linkedMapOf("a" to 1, "b" to 2)

1.3 Pair 创建 #

kotlin
val map = mapOf(
    Pair("a", 1),
    Pair("b", 2),
    "c" to 3
)

二、访问元素 #

2.1 按键访问 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

map["a"]              // 1
map.get("a")          // 1
map.getValue("a")     // 1
map.getOrDefault("d", 0)  // 0
map.getOrElse("d") { 0 }  // 0

2.2 安全访问 #

kotlin
val map = mapOf("a" to 1, "b" to 2)

map["c"]              // null
map.getValue("c")     // 抛出 NoSuchElementException
map.getOrDefault("c", 0)  // 0

2.3 获取键和值 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

map.keys              // [a, b, c]
map.values            // [1, 2, 3]
map.entries           // [a=1, b=2, c=3]

三、添加元素 #

3.1 添加单个元素 #

kotlin
val map = mutableMapOf("a" to 1)

map["b"] = 2
map.put("c", 3)
// {a=1, b=2, c=3}

3.2 添加多个元素 #

kotlin
val map = mutableMapOf("a" to 1)

map.putAll(mapOf("b" to 2, "c" to 3))
// {a=1, b=2, c=3}

3.3 条件添加 #

kotlin
val map = mutableMapOf("a" to 1)

map.putIfAbsent("a", 10)  // 返回 1,不添加
map.putIfAbsent("b", 2)   // 返回 null,添加
// {a=1, b=2}

3.4 使用 + 操作符 #

kotlin
val map = mapOf("a" to 1, "b" to 2)

val newMap = map + ("c" to 3)
val newMap2 = map + mapOf("c" to 3, "d" to 4)

四、删除元素 #

4.1 按键删除 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)

map.remove("a")       // 返回 1
map.remove("d")       // 返回 null
// {b=2, c=3}

4.2 按键值删除 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2)

map.remove("a", 1)    // true,删除成功
map.remove("b", 10)   // false,值不匹配

4.3 条件删除 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2, "c" to 3)

map.entries.removeIf { it.value > 2 }
// {a=1, b=2}

4.4 清空映射 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2)

map.clear()
// {}

4.5 使用 - 操作符 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

val newMap = map - "a"
val newMap2 = map - listOf("a", "b")

五、修改元素 #

5.1 直接修改 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2)

map["a"] = 10
// {a=10, b=2}

5.2 计算新值 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2)

map.compute("a") { _, value -> value?.times(2) }
// {a=2, b=2}

map.computeIfAbsent("c") { 3 }
// {a=2, b=2, c=3}

map.computeIfPresent("a") { _, value -> value + 1 }
// {a=3, b=2, c=3}

5.3 合并值 #

kotlin
val map = mutableMapOf("a" to 1, "b" to 2)

map.merge("a", 10) { old, new -> old + new }
// {a=11, b=2}

map.merge("c", 3) { old, new -> old + new }
// {a=11, b=2, c=3}

六、遍历 Map #

6.1 遍历键值对 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

for ((key, value) in map) {
    println("$key -> $value")
}

6.2 forEach #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

map.forEach { (key, value) ->
    println("$key -> $value")
}

6.3 遍历键 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

for (key in map.keys) {
    println("$key -> ${map[key]}")
}

6.4 遍历条目 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

for (entry in map.entries) {
    println("${entry.key} -> ${entry.value}")
}

七、查找操作 #

7.1 按键查找 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

map.containsKey("a")    // true
"a" in map              // true

7.2 按值查找 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

map.containsValue(2)    // true
map.values.contains(2)  // true

7.3 查找键或值 #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

map.filterKeys { it == "a" }      // {a=1}
map.filterValues { it > 1 }       // {b=2, c=3}
map.filter { (_, v) -> v > 1 }    // {b=2, c=3}

八、转换操作 #

8.1 mapKeys / mapValues #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

val newKeys = map.mapKeys { it.key.uppercase() }
// {A=1, B=2, C=3}

val newValues = map.mapValues { it.value * 2 }
// {a=2, b=4, c=6}

8.2 转换为 List #

kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)

val list = map.toList()  // [(a, 1), (b, 2), (c, 3)]
val keys = map.keys.toList()  // [a, b, c]
val values = map.values.toList()  // [1, 2, 3]

九、实战示例 #

9.1 词频统计 #

kotlin
fun wordCount(text: String): Map<String, Int> {
    return text.split(Regex("\\s+"))
        .groupingBy { it.lowercase() }
        .eachCount()
}

val text = "Hello World Hello Kotlin"
val counts = wordCount(text)
// {hello=2, world=1, kotlin=1}

9.2 分组数据 #

kotlin
data class Person(val name: String, val department: String)

val people = listOf(
    Person("Alice", "Engineering"),
    Person("Bob", "Marketing"),
    Person("Charlie", "Engineering")
)

val byDepartment = people.groupBy { it.department }
// {Engineering=[Alice, Charlie], Marketing=[Bob]}

9.3 缓存实现 #

kotlin
class Cache<K, V>(private val maxSize: Int) {
    private val map = linkedMapOf<K, V>()
    
    fun get(key: K): V? = map[key]
    
    fun put(key: K, value: V) {
        if (map.size >= maxSize && !map.containsKey(key)) {
            map.remove(map.keys.first())
        }
        map[key] = value
    }
    
    fun remove(key: K) = map.remove(key)
    
    fun clear() = map.clear()
}

十、Map 实现类选择 #

实现类 特点 适用场景
HashMap 高性能,无序 默认选择
LinkedHashMap 保持插入顺序 需要顺序
TreeMap 按键排序 需要排序

十一、总结 #

Map 常用操作:

操作 方法
访问 get, getValue, []
添加 put, []=
删除 remove
遍历 for ((k, v) in map)
过滤 filterKeys, filterValues

下一步,让我们学习 集合操作

最后更新:2026-03-27