1. 概述
在 Kotlin 中,遍历 Map 是一个常见操作。本文将介绍几种常用的遍历方式,包括使用 for
循环、forEach
、以及通过 keys
和 values
属性进行遍历。我们还会提到一些性能注意事项,帮助你在不同场景下选择最合适的方法。
2. 使用 for 循环遍历 Map
最标准的遍历方式是通过 for
循环遍历 Map 的 Entry
对象:
val map = mapOf("Key1" to "Value1", "Key2" to "Value2", "Key3" to "Value3")
for (entry in map.entries) {
println("${entry.key} : ${entry.value}")
}
这里的 in
操作符会自动调用 map.entries
的迭代器,等价于:
for (entry in map.entries.iterator()) {
println("${entry.key} : ${entry.value}")
}
✅ 优点:清晰直观,适合所有 Map 类型。
❌ 缺点:语法略显冗长。
3. 使用 forEach 遍历
Kotlin 提供了简洁的 forEach
扩展函数,可以简化代码:
map.forEach { entry ->
println("${entry.key} : ${entry.value}")
}
更进一步,我们可以使用 解构声明(destructuring) 来直接获取 key 和 value:
map.forEach { (key, value) ->
println("$key : $value")
}
⚠️ 注意:解构声明只适用于支持 component1()
和 component2()
方法的对象,Map.Entry 正好符合这个条件。
✅ 优点:代码简洁,语义清晰。
✅ 推荐方式:大多数情况下优先使用这种方式。
4. 只遍历 Key
如果你只需要遍历所有的 key,可以使用 map.keys
:
for (key in map.keys) {
println(key)
}
map.keys
返回的是一个 Set,所以你也可以这样写:
map.keys.forEach { key ->
val value = map[key]
println("$key : $value")
}
⚠️ 性能提醒:这种写法会多次调用 map.get()
,效率不如直接遍历 Entry。
✅ 适用场景:只关心 key 的情况,或者需要根据 key 做额外处理。
5. 只遍历 Value
如果只需要遍历所有的 value,可以使用 map.values
:
for (value in map.values) {
println(value)
}
同样,也可以使用 forEach
:
map.values.forEach { value ->
println(value)
}
✅ 适用场景:只关心 value,无需访问 key。
6. 总结
方法 | 是否推荐 | 说明 |
---|---|---|
for (entry in map.entries) |
✅ 是 | 通用性强,性能好 |
map.forEach { (k, v) -> } |
✅ 是 | 推荐方式,简洁清晰 |
map.keys.forEach |
⚠️ 否 | 性能略差,适合只处理 key 的场景 |
map.values.forEach |
⚠️ 否 | 同上,适合只处理 value 的场景 |
✅ 建议:除非你有特殊需求,否则推荐使用 forEach
配合解构声明来遍历 Map。
完整示例代码请参考:GitHub 示例地址