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