本文介绍: 数组是一种数据结构,它保存固定数量的相同类型或其子类型的值。kotlin中最常见的数组类型对象类型数组数组array类表示。

数组是一种数据结构,它保存固定数量的相同类型或其子类型的值。kotlin中最常见的数组类型对象类型数组数组array类表示。

什么时候使用

当你在kotlin中有特殊的底层需求需要满足时,可以使用数组。例如,如果你有超出常规应用所需的性能要求,或者你需要构建自定义数据结构。如果你没有这些限制,那么可以使用集合(Collections)。

与数组相比,集合有以下优点:

创建数组

  • 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 的构造方法

    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进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注