数组是一种数据结构,它保存固定数量的相同类型或其子类型的值。kotlin
中最常见的数组类型是对象类型数组,数组由array
类表示。
什么时候使用
当你在kotlin
中有特殊的底层需求需要满足时,可以使用数组。例如,如果你有超出常规应用所需的性能要求,或者你需要构建自定义的数据结构。如果你没有这些限制,那么可以使用集合(Collections)。
与数组相比,集合有以下优点:
- 集合可以是只读的,这给你提供了更多的控制权,使你能够编写具有明确意图的健壮代码。
- 从集合中添加或删除元素很容易。相比之下,数组的大小是固定的。从数组中添加或删除元素的唯一方法是每次都创建一个新的数组,这非常低效。
fun main() { val riversArray1 = arrayOf("Nile", "Amazon", "Yangtze") val riversArray2 = riversArray1 + "Mississippi" println(riversArray1.joinToString()) // Nile, Amazon, Yangtze println(riversArray2.joinToString()) // Nile, Amazon, Yangtze, Mississippi }
- 可以使用
==
来比较两个集合是否相同,但是不能使用该操作来比较数组
创建数组
arrayOf()
,arrayOfNulls()
,emptyArray()
fun main() { val simpleArray = arrayOf(1, 2, 3) println(simpleArray.joinToString()) // 1, 2, 3 val nullArray: Array<Int?> = arrayOfNulls(3) println(nullArray.joinToString()) // null, null, null val exampleArray1 = emptyArray<String>() val exampleArray2: Array<String> = emptyArray() println(exampleArray1.joinToString()) // 空 println(exampleArray2.joinToString()) // 空 }
Array
的构造方法
fun main() { val initArray = Array<Int>(3) { 0 } println(initArray.joinToString()) // 0, 0, 0 val asc = Array(5) { i -> (i * i).toString() } println(asc.joinToString()) // 014916 }
嵌套数组
fun main() {
// 两层嵌套
val twoDArray = Array(2) { Array<Int>(2) { 0 } }
println(twoDArray.contentDeepToString()) // [[0, 0], [0, 0]]
// 三层嵌套
val threeDArray = Array(3) { Array(3) { Array<Int>(3) { 0 } } }
println(threeDArray.contentDeepToString()) // [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
}
获取/修改
数组中的元素是可变的,如果想要获取和修改数组中的元素需要使用[索引]
来操作
fun main() {
val simpleArray = arrayOf(1, 2, 3)
val twoDArray = Array(2) { Array<Int>(2) { 0 } }
// 修改元素
simpleArray[0] = 10
twoDArray[0][0] = 2
println(simpleArray[0].toString()) // 10
println(twoDArray[0][0].toString()) // 2
}
使用数组
在kotlin
中,数组可以作为方法的可变数量参数
使用,也可以对数组本身做操作,如比较数组、转换数组内容,转成集合等
可变数量参数
可变数量参数使用vararg
声明,传递参数前使用*
fun main() {
val lettersArray = arrayOf("c", "d")
printAllStrings("a", "b", *lettersArray)
// abcd
}
fun printAllStrings(vararg strings: String) {
for (string in strings) {
print(string)
}
}
比较
对比数据需要使用.contentEquals()
或者.contentDeepEquals()
方法
fun main() {
val simpleArray = arrayOf(1, 2, 3)
val anotherArray = arrayOf(1, 2, 3)
println(simpleArray.contentEquals(anotherArray)) // true
// 修改元素
simpleArray[0] = 10
println(simpleArray contentEquals anotherArray) // false
}
常用方法
求和
fun main() {
val sumArray = arrayOf(1, 2, 3)
println(sumArray.sum()) // 6
}
洗牌(打乱顺序)
随机打乱顺序
fun main() {
val simpleArray = arrayOf(1, 2, 3)
simpleArray.shuffle()
println(simpleArray.joinToString()) // 1, 3, 2
simpleArray.shuffle()
println(simpleArray.joinToString()) // 2, 1, 3
}
转成集合
转成List
或者Set
使用.toList()
或者.toSet()
方法
fun main() {
val simpleArray = arrayOf("a", "b", "c", "c")
println(simpleArray.toSet()) // [a, b, c]
println(simpleArray.toList())// [a, b, c, c]
}
转成Map
使用.toMap
方法
只有键值对数组才能转成Map
fun main() {
val pairArray = arrayOf("apple" to 120, "banana" to 150, "cherry" to 90, "apple" to 140)
println(pairArray.toMap()) // {apple=140, banana=150, cherry=90}
}
基本类型数组
如果使用上文中的数组,数据类型会被包装成Object
类型,如果需要存储基本数据类型的元素,可以使用基本数据类型数组,避免开装箱造成的性能损失
基本类型数组有
BooleanArray
ByteArray
CharArray
DoubleArray
FloatArray
IntArray
LongArray
ShortArray
虽然这写类和Array
没有继承关系,但是具有相同的方法
Object
类型数组和基本类型数组可以互转
fun main() {
val intObjArray = arrayOf(1, 2, 3, 4)
intObjArray.toIntArray() // 转成Int数组
val intArray = intArrayOf(1, 2, 3, 4)
intArray.toTypedArray() // 转成Object数组
val booleanArray = booleanArrayOf(false, true)
booleanArray.toTypedArray()
val booleanObjArray = arrayOf(false, true)
booleanObjArray.toBooleanArray()
}
原文地址:https://blog.csdn.net/qq_40104261/article/details/134590586
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_2363.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!