Kotlin中遍历集合的方法

在 Kotlin 中,遍历 MutableList 有多种方式,可根据需求选择合适的方法,以下是常用遍历方式及示例:

1. for 循环遍历(最常用)

直接通过 for-in 循环遍历 MutableList,语法简洁,适用于大多数场景。

kotlin 复制代码
val mutableList = mutableListOf("A", "B", "C")

// 遍历元素
for (item in mutableList) {
    println(item) // 输出:A、B、C
}

// 遍历索引和元素(withIndex())
for ((index, item) in mutableList.withIndex()) {
    println("索引 $index:$item") // 输出:索引 0:A、索引 1:B、索引 2:C
}

2. 迭代器遍历(Iterator)

通过 iterator() 获取迭代器,手动控制遍历过程,支持在遍历中安全删除元素。

kotlin 复制代码
val mutableList = mutableListOf("A", "B", "C")
val iterator = mutableList.iterator()

while (iterator.hasNext()) {
    val item = iterator.next()
    println(item) // 输出:A、B、C

    // 遍历中删除元素(安全操作)
    if (item == "B") {
        iterator.remove() // 删除 "B",不会触发 ConcurrentModificationException
    }
}

println(mutableList) // 输出:[A, C]

3. forEach 遍历(函数式风格)

使用 forEach 扩展函数,简洁高效,适合不需要中断遍历的场景。

kotlin 复制代码
val mutableList = mutableListOf("A", "B", "C")

// 基本遍历
mutableList.forEach { item ->
    println(item) // 输出:A、B、C
}

// 简化写法(单个参数可省略 ->)
mutableList.forEach {
    println(it) // 输出:A、B、C
}

// 带索引的 forEachIndexed
mutableList.forEachIndexed { index, item ->
    println("索引 $index:$item") // 输出:索引 0:A、索引 1:B、索引 2:C
}

4. 遍历并修改元素

如果需要在遍历中修改元素,可通过索引遍历或 withIndex() 实现。

kotlin 复制代码
val mutableList = mutableListOf(1, 2, 3)

// 通过索引遍历修改
for (i in mutableList.indices) {
    mutableList[i] *= 2 // 元素翻倍
}

println(mutableList) // 输出:[2, 4, 6]

// 或用 withIndex() 修改
val list = mutableListOf("X", "Y", "Z")
for ((index, item) in list.withIndex()) {
    list[index] = item.lowercase() // 转为小写
}

println(list) // 输出:[x, y, z]

5. 其他遍历方式

  • listIterator() :双向迭代器,支持向前 / 向后遍历,适合复杂场景。

    kotlin 复制代码
    val mutableList = mutableListOf("A", "B", "C")
    val listIterator = mutableList.listIterator(mutableList.size) // 从末尾开始
    
    while (listIterator.hasPrevious()) {
        println(listIterator.previous()) // 输出:C、B、A
    }
  • for 循环 + 索引范围:手动控制索引范围,灵活但需注意边界。

    kotlin 复制代码
    val mutableList = mutableListOf("A", "B", "C")
    for (i in 0 until mutableList.size) {
        println(mutableList[i]) // 输出:A、B、C
    }

总结

  • 简单遍历 :优先用 for-inforEach
  • 需要索引 :用 withIndex()forEachIndexed
  • 遍历中删除 :必须用 Iteratoriterator()listIterator())。
  • 函数式风格 :用 forEachforEachIndexed

根据具体场景选择最合适的遍历方式即可。

相关推荐
Dream_sky分享20 小时前
Excel模板下载(Resources目录下)
java·spring boot·后端
羊小猪~~20 小时前
算法/力扣--链表经典题目
数据结构·后端·考研·算法·leetcode·链表·面试
Anastasiozzzz20 小时前
编程语言错误处理的清流:Go 错误处理
开发语言·后端·golang
木易 士心21 小时前
自然语言转数据库操作语句原理架构图分析和实现
数据库·后端
jgbazsh21 小时前
Spring中把一个bean对象交给Spring容器管理的三种方式
java·后端·spring
华仔啊21 小时前
前端不懂 Java?后端怕 CSS?这套AI全栈方案专治各种偏科
java·前端·后端
木易 士心21 小时前
Node.js 后端开发全解析:从核心原理架构到实战应用
后端·架构·node.js
皮卡丘不断更21 小时前
我把传统项目问答升级成了 Agent-RAG:Spring Boot + FastAPI + ChromaDB 工程落地实践
人工智能·spring boot·后端·架构·python3.11
H5css�海秀1 天前
今天是自学大模型的第一天(sanjose)
后端·python·node.js·php
SuniaWang1 天前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构