You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何高效实现两个列表的左连接操作?

优化左连接查找性能的方案

你的核心问题是每次循环调用find{}带来的O(n²)时间复杂度——虽然1000条数据下差异不明显,但数据量扩大后性能会急剧下降。最直接的优化方式是先将createDatabase转换为哈希表,把单条查找操作的时间复杂度从O(n)降到O(1)。

具体实现步骤:

  • 第一步:把createDatabase转换成以refKey为键、random为值的Map<Int, Int>,仅需一次遍历完成构建。
  • 第二步:遍历目标列表时,直接从Map中通过键取值,无需再逐个遍历查找。

优化后的Kotlin代码:

import kotlin.random.Random

data class DatabaseRow(
    val refKey: Int,
    val random: Int  
)

fun main() {
    val createDatabase = (1..1000).map { i -> DatabaseRow(i, Random.nextInt()) }
    
    // 预构建哈希映射,直接关联refKey和对应的random值
    val refKeyToRandomMap = createDatabase.associateBy({ it.refKey }, { it.random })
    
    // 直接通过Map取值,整体时间复杂度为O(n)
    val listOfRandoms = (1..1000).map { j ->
        // 因createDatabase包含1-1000的refKey,此处不会返回null;若实际场景存在缺失,可改用getOrDefault
        refKeyToRandomMap[j]!!
    }
}

左连接场景补充处理:

如果目标列表中可能存在createDatabase没有的refKey(标准左连接逻辑),可以用getOrDefault设置默认值,示例如下:

refKeyToRandomMap.getOrDefault(j, 0) // 0为找不到匹配项时的默认值,可根据需求调整

内容的提问来源于stack exchange,提问作者mars8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:05:21