Kotlin数组操作
外观
Kotlin数组操作[编辑 | 编辑源代码]
数组(Array)是Kotlin中最基础的数据结构之一,用于存储固定大小的同类型元素集合。Kotlin提供了丰富的原生操作和扩展函数来处理数组。
数组基础[编辑 | 编辑源代码]
Kotlin中的数组由`Array`类表示,与Java不同,Kotlin数组是类型安全的。创建数组的主要方式有:
创建数组[编辑 | 编辑源代码]
// 方式1:使用arrayOf函数
val numbers = arrayOf(1, 2, 3, 4, 5)
// 方式2:使用Array构造函数
val squares = Array(5) { i -> (i + 1) * (i + 1) }
// 方式3:原生类型数组(避免装箱开销)
val byteArray = byteArrayOf(1, 2, 3)
val intArray = intArrayOf(4, 5, 6)
数组类型体系[编辑 | 编辑源代码]
核心操作[编辑 | 编辑源代码]
访问与修改[编辑 | 编辑源代码]
val languages = arrayOf("Kotlin", "Java", "Python")
// 通过索引访问
println(languages[0]) // 输出: Kotlin
// 修改元素
languages[1] = "C++"
println(languages.joinToString()) // 输出: Kotlin, C++, Python
// 安全访问
val index = 5
println(languages.getOrNull(index) ?: "Index out of bounds")
遍历数组[编辑 | 编辑源代码]
Kotlin提供多种遍历方式:
val colors = arrayOf("Red", "Green", "Blue")
// 方式1:for循环
for (color in colors) {
println(color)
}
// 方式2:forEach高阶函数
colors.forEach { println(it.uppercase()) }
// 方式3:带索引遍历
colors.forEachIndexed { index, color ->
println("$index: $color")
}
常用操作函数[编辑 | 编辑源代码]
Kotlin为数组提供了丰富的扩展函数:
转换操作[编辑 | 编辑源代码]
val nums = intArrayOf(1, 2, 3)
// map: 转换为新数组
val doubled = nums.map { it * 2 } // 返回List<Int>
println(doubled) // 输出: [2, 4, 6]
// filter: 过滤元素
val evens = nums.filter { it % 2 == 0 }
println(evens) // 输出: [2]
聚合操作[编辑 | 编辑源代码]
val prices = doubleArrayOf(12.5, 8.0, 9.99)
// 求和
val total = prices.sum()
println("Total: $total") // 输出: Total: 30.49
// 最大值/最小值
println("Max: ${prices.max()}") // 输出: Max: 12.5
println("Min: ${prices.min()}") // 输出: Min: 8.0
排序操作[编辑 | 编辑源代码]
val randomNumbers = intArrayOf(3, 1, 4, 1, 5, 9)
// 升序排序(不修改原数组)
val sortedAsc = randomNumbers.sorted()
println(sortedAsc) // 输出: [1, 1, 3, 4, 5, 9]
// 降序排序(修改原数组)
randomNumbers.sortDescending()
println(randomNumbers.toList()) // 输出: [9, 5, 4, 3, 1, 1]
多维数组[编辑 | 编辑源代码]
Kotlin支持创建多维数组来处理矩阵等数据结构:
// 创建二维数组
val matrix = Array(3) { IntArray(3) { 0 } }
// 初始化矩阵
for (i in 0..2) {
for (j in 0..2) {
matrix[i][j] = i + j
}
}
// 打印矩阵
matrix.forEach { row ->
println(row.joinToString())
}
/* 输出:
0, 1, 2
1, 2, 3
2, 3, 4
*/
性能考虑[编辑 | 编辑源代码]
Kotlin数组操作的时间复杂度:
操作 | 时间复杂度 |
---|---|
随机访问 | O(1) |
线性搜索 | O(n) |
排序 | O(n log n) |
复制 | O(n) |
数学表示:对于长度为的数组,搜索操作平均需要次比较。
实际应用案例[编辑 | 编辑源代码]
案例1:成绩统计[编辑 | 编辑源代码]
fun analyzeScores(scores: IntArray) {
val average = scores.average()
val passed = scores.count { it >= 60 }
val distribution = scores.groupBy { it / 10 * 10 }
println("平均分: $average")
println("及格人数: $passed")
distribution.forEach { (range, list) ->
println("$range-${range+9}分: ${list.size}人")
}
}
// 使用示例
val testScores = intArrayOf(85, 92, 78, 45, 67, 89, 53, 91)
analyzeScores(testScores)
案例2:图像处理[编辑 | 编辑源代码]
处理图像的像素矩阵:
fun applyGrayscale(pixels: Array<IntArray>) {
for (row in pixels.indices) {
for (col in pixels[row].indices) {
val color = pixels[row][col]
val gray = (0.299 * (color shr 16 and 0xFF) +
0.587 * (color shr 8 and 0xFF) +
0.114 * (color and 0xFF)).toInt()
pixels[row][col] = (gray shl 16) or (gray shl 8) or gray
}
}
}
最佳实践[编辑 | 编辑源代码]
- 优先使用原生类型数组(如`IntArray`)以减少内存开销
- 对大型数组使用`forEach`而非传统`for`循环,可获得更好的FP支持
- 需要频繁增删元素时考虑使用`List`而非数组
- 使用`contentEquals`比较数组内容而非`==`运算符
页面模块:Message box/ambox.css没有内容。
Kotlin数组大小固定,尝试访问越界索引会抛出`ArrayIndexOutOfBoundsException` |