Kotlin 中集合遍历有哪几种方式?
1 for-in
循环(最常用)
val list = listOf("A", "B", "C")
for (item in list) {print("$item ")
}// A B C
2 forEach
高阶函数
val list = listOf("A", "B", "C")
list.forEach { item ->print("$item ")
}// A B C
3 带索引遍历
3.1 使用 forEachIndexed
val list = listOf("A", "B", "C")
list.forEachIndexed { index, item ->println("$index - $item")
}// 0 - A
// 1 - B
// 2 - C
3.2 使用 withIndex()
+ for-in
使用 withIndex()
生成包含索引和值的迭代器。
val list = listOf("A", "B", "C")
for ((index, item) in list.withIndex()) {println("$index - $item")
}// 0 - A
// 1 - B
// 2 - C
4 传统索引遍历(适用于 List
)
通过集合的 indices 属性获取索引范围。
val list = listOf("A", "B", "C")
for (i in list.indices) { // println("${list[i]} at $i")
}// A at 0
// B at 1
// C at 2
5 迭代器(iterator
)
val list = listOf("A", "B", "C")
val iterator = list.iterator()
while (iterator.hasNext()) {print("${iterator.next()} ")
}// A B C
6 List
专用:双向遍历(ListIterator
)
val list = listOf("A", "B", "C")
val listIterator = list.listIterator()
while (listIterator.hasNext()) {print("${listIterator.next()} ")
}println()while (listIterator.hasPrevious()) {print("${listIterator.previous()} ")
}// A B C
// C B A
7 while
循环(手动控制索引)
val list = listOf("A", "B", "C")
var i = 0
while (i < list.size) {print("${list[i]} ")i++
}
// A B C
8 map
遍历转换(返回新集合)
val list = listOf("A", "B", "C")
val newList = list.map { item ->"Item: $item"
}
println(newList)// [Item: A, Item: B, Item: C]
9 区间遍历(for
+ until
/downTo
)
适用于需要自定义步长或方向的场景:
val list = listOf("A", "B", "C")
for (i in 0 until list.size) {print("${list[i]} ")
}
// A B C val list = listOf("A", "B", "C")
for (i in list.size - 1 downTo 0) {print("${list[i]} ")
}
// C B A val list = listOf("A", "B", "C")
for (i in 0 until list.size step 2) { // 指定步长print("${list[i]} ")
}// A C
10 不同场景推荐
- 简单遍历:
for-in
或forEach
- 需要索引:
forEachIndexed
或withIndex
- 逆序遍历:
reversed()
+for-in
- 需要删除元素:使用
MutableIterator
(在迭代中安全删除)
val list = listOf("A", "B", "C")
for (item in list.reversed()) {print("$item ")
}// C B A val mutableList = mutableListOf("A", "B", "C")
val iterator = mutableList.iterator()
while (iterator.hasNext()) {if (iterator.next() == "B") iterator.remove()
}
println(mutableList)// [A, C]