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

Kotlin中如何高效获取列表指定索引区间内的元素

Kotlin高效获取列表索引区间元素的方法

嗨,这个需求在Kotlin里其实有非常简洁且高效的实现方案,我来给你一步步说明:

核心方案:使用标准库的subList函数

Kotlin的List和MutableList都内置了subList方法,这是获取指定索引区间元素的最优解——因为它不会创建元素副本,只是返回原列表的一个视图,时间复杂度为O(1),性能拉满。

不过要注意一个关键细节:subList的参数是fromIndex(包含)和toIndex(不包含),也就是说它获取的是[fromIndex, toIndex)区间的元素。所以如果你的需求是包含endingIndex对应的元素,需要把toIndex设置为endingIndex + 1。

示例代码实现

先定义你的原列表:

val list = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)

场景1:startingIndex = 2,endingIndex = 6

val startingIndex = 2
val endingIndex = 6
// 因为要包含endingIndex的元素,所以toIndex设为endingIndex + 1
val result1 = list.subList(startingIndex, endingIndex + 1)
println(result1) // 输出:[3, 4, 5, 6, 7]

场景2:startingIndex = 0,endingIndex = 2

val startingIndex2 = 0
val endingIndex2 = 2
val result2 = list.subList(startingIndex2, endingIndex2 + 1)
println(result2) // 输出:[1, 2, 3]

进阶:获取独立副本(可选)

如果你不希望子列表随原列表修改而变化,可以调用toList()或toMutableList()生成独立副本:

// 生成不可变的独立列表
val independentList = list.subList(2,7).toList()
// 生成可变的独立列表
val independentMutableList = list.subList(2,7).toMutableList()

安全处理边界情况

如果传入的索引可能越界(比如startingIndex < 0或endingIndex >= list.size),可以封装一个安全的工具函数避免崩溃:

fun safeGetSubList(list: List<Int>, startingIndex: Int, endingIndex: Int): List<Int> {
    val validStart = maxOf(0, startingIndex)
    val validEnd = minOf(list.lastIndex, endingIndex)
    return if (validStart > validEnd) {
        emptyList()
    } else {
        list.subList(validStart, validEnd + 1)
    }
}

// 测试越界情况
println(safeGetSubList(list, -1, 15)) // 输出整个原列表:[1,2,...,13]
println(safeGetSubList(list, 10, 5)) // 输出空列表:[]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:02:42