Kotlin中如何扁平化HashMap并高效获取键列表?
优化HashMap集合的键列表获取性能
你的代码之所以慢,核心是做了两次完整遍历:先把所有Map的Entry都收集成中间集合,再遍历这个集合提取键,而且Entry本身包含键值对,占用的内存比单独的键更多,额外增加了开销。
以下是几种更高效的实现方式:
1. 一步完成扁平化与键提取(最简洁)
直接利用每个Map的keys属性,通过flatMap一次遍历完成合并:
val keys = data.flatMap { it.keys }
这种方式只需要遍历一次所有的Map,直接提取每个Map的键集合并扁平化,避免了中间的Entry集合,内存开销和遍历次数都减半。
2. 手动构建列表(性能最优)
如果追求极致性能,用buildList直接往目标列表中添加键,减少中间对象的创建:
val keys = buildList { data.forEach { map -> addAll(map.keys) } }
buildList会预先估算容量(如果能确定的话),直接在底层数组中添加元素,避免了flatMap可能产生的临时Iterable对象,适合数据量较大的场景。
特殊场景:如果data是单个HashMap
如果你的data其实是单个HashMap而非多个Map的集合,那根本不需要flatMap,直接取键转列表即可:
val keys = data.keys.toList()
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

