【文字内容源于《疯狂Kotlin讲义》,代码内容原创】

Kotlin 数组和集合(二){Set集合、List集合、Map集合}_桃子不出的博客-CSDN博客_kotlin sortedset

目录

1. 创建数组

2. 使用数组

3. 使用 for-in 循环遍历数组

4. 使用数组索引

5. 多维数组


1. 创建数组

[1] 使用 arrayOf()函数:这种方式无须显式指定数组的长度,但需要依次列出每个数组元素。因此,这种方式其实就相当于 Java 数组的静态初始化。使用这种方式创建数组时,由于程序己经给出了每个数组元素,因此 Kotlin 可以推断出数组元素的类型。所以,不需要在 arrayOf() 函数上使用泛型来指定数组元素的类型。

val intList = arrayOf(1, 2, 3)
for (i in intList) {
    println("intList has $i")
}


运行结果:
intList has 1
intList has 2
intList has 3

[2] 使用 arrayOfNulls ()函数:这种方式需要显式指定数组的长度,数组元素全部被初始化null ,可见这种方式就是 Java 数组的动态初始化。使用这种方式创建数组时,由于Kotlin 无法推断出数组元素的类型,所以需要在 rrayOfNull ()函数上使用泛型来指定数组元素的类型。

val stringList = arrayOfNulls<String>(3)
stringList[0] = "hello"
stringList[1] = "你好"
stringList[2] = "萨瓦迪卡"
for (s in stringList) {
    println("stringList has $s")
}

运行结果:
stringList has hello
stringList has 你好
stringList has 萨瓦迪卡

[3] 使用 emptyArray()函数: 这种方式会创建一个长度为0的空数组。由于没有指定数组元素,因此需要使用泛型来指定数组元素的类型。

val emptyList = arrayOfNulls<Int>(4)
for (e in emptyList){
    println("emptyList has $e")
}

运行结果:
emptyList has null
emptyList has null
emptyList has null
emptyList has null

[4] 使用 Array(size: 川, init: (Int) -> )构造器: 这种方式需要显式指定数组的长度,并可通过 Lambda 表达式来动态计算各数组元素的值。这种方式是原来 Java 所不具备的。

val arr1 = Array(3) { "test" }
for (a1 in arr1) {
    println("arr1 has $a1")
}

运行结果:
arr1 has test
arr1 has test
arr1 has test

//Lambda表达式中的it用于代表该表达式的唯一形参
val arr2 = Array(3) { (it + 2) * 4 }
for (a2 in arr2) {
    println("arr2 has $a2")
}

运行结果:
arr2 has 8
arr2 has 12
arr2 has 16

2. 使用数组

数组的常用方法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。访问数组元素都是通过在数组引用变量后紧跟 个方括号( [] )实现的,方括号里是数组元素的索引。正如前面所介绍的, Kotlin 的方括号运算符其实是 get(index)和 set(index, value)方法,因此当程序使用[i]获取数组元素的值时,实际上就是调用 get( index )方法;当使用 [index]数组元素赋值时,实际上就是调用 set(index , value)方法。

val intArray = intArrayOf(11, 22, 33, 44)
//获取第一个元素的值
println("intArray[0] = ${intArray[0]}")
//对第三个元素的值重新赋值
println("intArray[0] before is ${intArray[2]}")
intArray[2] = 333
println("intArray[0] after is ${intArray[2]}")

运行结果:
intArray[0] = 11
intArray[0] before is 33
intArray[0] after is 333

3. 使用 for-in 循环遍历数组

Kotlin for-in 循环可自动遍历数组的每个元素。

val forInArray = arrayOf("今天过得好吗?", "今天过得好。", "那真是太好了。")
for (f in forInArray) {
    println(f)
}

运行结果:
今天过得好吗?
今天过得好。
那真是太好了。

4. 使用数组索引

[1] 使用索引遍历数组时使用until arra size 这种方式来创建区间。

[2] Kotlin 的数组提供了indices 属性,该属性即可返回数组的索引区间。(更便捷)

val indicesArray = arrayOf(1, 3, 5, 7, 9)
for (index1 in 0 until indicesArray.size) {
    println("[1]until test : ${indicesArray[index1]}")
}
for (index2 in indicesArray.indices) {
    println("[2]indices test : ${indicesArray[index2]}")
}

运行结果:
[1]until test : 1
[1]until test : 3
[1]until test : 5
[1]until test : 7
[1]until test : 9
[2]indices test : 1
[2]indices test : 3
[2]indices test : 5
[2]indices test : 7
[2]indices test : 9

5. 多维数组

所谓的多维数组其实都是 维数组,只要让数组的元素又是数组,那么该数组就变成了多维数组。

val multiArray = arrayOfNulls<Array<String>>(4)
//初始化数组元素
multiArray[0] = arrayOf("现在是春天吗?", "是的,现在是春天。")
multiArray[1] = arrayOf("现在是夏天吗?", "是的,现在是夏天。")
multiArray[2] = arrayOf("现在是秋天吗?", "是的,现在是秋天。")
multiArray[3] = arrayOf("现在是冬天吗?", "是的,现在是冬天。")
for (firstIndex in multiArray.indices) {
    val detailString = StringBuilder("")
    for (secondIndex in multiArray[firstIndex]!!.indices) {
        detailString.append(multiArray[firstIndex]!![secondIndex])
        if (secondIndex != multiArray[firstIndex]!!.lastIndex) {
            detailString.append(" | ")
        }
    }
    println("$firstIndex | $detailString")
}

运行结果:
0 | 现在是春天吗? | 是的,现在是春天。
1 | 现在是夏天吗? | 是的,现在是夏天。
2 | 现在是秋天吗? | 是的,现在是秋天。
3 | 现在是冬天吗? | 是的,现在是冬天。
今天的内容到此结束!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐