09. kotlin 数组和集合类

数组

数组在 Kotlin 是由 Array 类表示的。它有 get ()和 set ()函数,这些函数通过运算符重载约定转换为[] ,还有 size 属性,以及其他有用的成员函数:

1
2
3
4
5
6
7
8
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit

operator fun iterator(): Iterator<T>
// ...
}

要创建一个数组,使用函数 arrayOf ()并将条目值传递给它,以便 arrayOf (1, 2, 3)创建一个数组[1, 2, 3]。或者,可以使用 arrayOfNull ()函数创建一个给定大小的数组,其中填充 null 元素。

另一种选择是使用 Array 构造函数,该构造函数接受数组大小,并返回给定索引的数组元素值:

1
2
3
// Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { println(it) }

[] 操作代表对成员函数 get ()和 set ()的调用。

Kotlin 的数组是不变的。这意味着 Kotlin 不允许我们将 Array<String> 赋给 Array<Any> ,这可以防止可能的运行时故障(但是您可以使用 Array<out Any> ,参见类型投影)。

基元类型数组

Kotlin 还有一些类,它们表示基元类型的数组,不需要装箱开销: ByteArray、 ShortArray、 IntArray 等等。这些类与 Array 类没有继承关系,但它们具有相同的一组方法和属性。它们每一个都有相应的工厂功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]

// Array of int of size 5 with values [0, 0, 0, 0, 0]
val arr = IntArray(5)

// Example of initializing the values in the array with a constant
// Array of int of size 5 with values [42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }

// Example of initializing the values in the array using a lambda
// Array of int of size 5 with values [0, 1, 2, 3, 4] (values initialized to their index value)
var arr = IntArray(5) { it * 1 }

参考