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

如何在Kotlin中按第一个列表的顺序获取两列表交集

Kotlin 两个列表求交集并保持首列表顺序的实现

要实现同时存在于两个列表中、且输出顺序与第一个列表一致的需求,核心思路是过滤第一个列表,只保留在第二个列表中存在的元素,同时通过集合优化查询效率,具体实现如下:

最优实现(兼顾效率与简洁)

val first = listOf(1, 2, 3, 4, 5,7,9,15,11)
val second = listOf(2, 15 , 4,3, 11)

// 将第二个列表转为Set,把O(n)的查询操作优化为O(1)
val secondElementSet = second.toSet()
val output = first.filter { secondElementSet.contains(it) }

println(output) // 输出结果:[2, 3, 4, 15, 11]

原理说明

  • filter 函数会严格按照第一个列表的元素顺序遍历,保留满足条件的元素,完美匹配顺序要求。
  • 把第二个列表转为 Set 是关键优化:如果直接用 first.filter { it in second },每次判断都要遍历第二个列表(时间复杂度O(n*m)),而Set的contains操作是常数时间,大数据量下性能提升明显。

处理重复元素场景

如果第一个列表存在重复元素,只要第二个列表包含该元素,重复项会被完整保留(符合顺序要求):

val first = listOf(2, 2, 3, 3, 4)
val second = listOf(2, 3)

val secondSet = second.toSet()
val output = first.filter { secondSet.contains(it) }
println(output) // 输出结果:[2, 2, 3, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:06:33