跳转到内容

Kotlin数组

来自代码酷

Kotlin数组是一种固定大小的线性数据结构,用于存储相同类型的元素。它是Kotlin标准库中提供的基础集合类型之一,支持高效的随机访问和遍历操作。本文将详细介绍Kotlin数组的声明、初始化、操作方法以及实际应用场景。

概述[编辑 | 编辑源代码]

Kotlin中的数组由类`Array<T>`表示,其中`T`是数组元素的类型。数组的大小在创建时确定,后续无法动态调整。Kotlin提供了多种方式创建和操作数组,包括原生类型数组(如`IntArray`、`DoubleArray`等)以优化性能。

核心特性[编辑 | 编辑源代码]

  • 固定大小:数组长度在初始化后不可更改。
  • 类型安全:所有元素必须是同一类型(或子类型)。
  • 零基索引:元素从索引`0`开始访问。
  • 高效随机访问:通过索引直接访问元素的时间复杂度为O(1)。

数组的声明与初始化[编辑 | 编辑源代码]

Kotlin提供了多种初始化数组的方式:

使用`arrayOf()`函数[编辑 | 编辑源代码]

  
// 声明并初始化一个字符串数组  
val fruits = arrayOf("Apple", "Banana", "Cherry")  
println(fruits.joinToString()) // 输出: Apple, Banana, Cherry

使用`Array`构造函数[编辑 | 编辑源代码]

通过构造函数可以动态生成数组元素:

  
// 创建一个包含5个偶数的数组  
val evenNumbers = Array(5) { it * 2 }  
println(evenNumbers.contentToString()) // 输出: [0, 2, 4, 6, 8]

原生类型数组[编辑 | 编辑源代码]

避免装箱开销,使用如`IntArray`、`DoubleArray`等:

  
val temperatures = intArrayOf(23, 25, 19)  
println(temperatures.sum()) // 输出: 67

数组操作[编辑 | 编辑源代码]

访问与修改元素[编辑 | 编辑源代码]

  
val colors = arrayOf("Red", "Green", "Blue")  
println(colors[1]) // 输出: Green  
colors[2] = "Yellow" // 修改第三个元素  
println(colors.contentToString()) // 输出: [Red, Green, Yellow]

遍历数组[编辑 | 编辑源代码]

使用`for`循环或高阶函数:

  
// 方式1:传统for循环  
for (i in colors.indices) {  
    println("Index $i: ${colors[i]}")  
}  

// 方式2:forEach高阶函数  
colors.forEach { color -> println(color) }

常用扩展函数[编辑 | 编辑源代码]

Kotlin为数组提供了丰富的扩展函数:

  • `filter`:筛选满足条件的元素
  • `map`:转换每个元素
  • `sorted`:排序数组
  
val numbers = arrayOf(4, 2, 8, 1)  
val squares = numbers.map { it * it }  
println(squares) // 输出: [16, 4, 64, 1]

多维数组[编辑 | 编辑源代码]

Kotlin通过数组的数组实现多维结构:

  
val matrix = arrayOf(  
    intArrayOf(1, 2, 3),  
    intArrayOf(4, 5, 6)  
)  
println(matrix[1][2]) // 输出: 6

graph TD A[单维数组] --> B[arrayOf 1,2,3] A --> C[Array 构造函数] D[多维数组] --> E[arrayOf intArrayOf...]

性能考虑[编辑 | 编辑源代码]

  • 访问时间复杂度:O(1)(随机访问)
  • 插入/删除时间复杂度:O(n)(需移动元素)
  • 内存占用:连续内存块,大小固定

实际应用案例[编辑 | 编辑源代码]

案例1:成绩统计[编辑 | 编辑源代码]

  
fun calculateAverage(scores: IntArray): Double {  
    return scores.average()  
}  

val testScores = intArrayOf(85, 90, 78, 92)  
println("平均分: ${calculateAverage(testScores)}") // 输出: 平均分: 86.25

案例2:图像像素处理[编辑 | 编辑源代码]

使用二维数组表示图像像素矩阵:

  
fun invertColors(pixels: Array<IntArray>) {  
    for (row in pixels.indices) {  
        for (col in pixels[row].indices) {  
            pixels[row][col] = 255 - pixels[row][col] // 颜色反相  
        }  
    }  
}

常见问题[编辑 | 编辑源代码]

模板:Collapsible

总结[编辑 | 编辑源代码]

Kotlin数组是处理固定大小集合的高效工具,特别适合需要快速随机访问的场景。通过结合标准库函数和原生类型支持,开发者可以灵活地实现各种数据操作需求。