【2023】Kotlin教程
第二篇 面向对象与函数式编程
第15章 数据容器——数组和集合
在计算机程序中会有很多数据,这些数据也需要一个容器将它们管理起来,这就是数据容器。
数据容器本质是基于某种数据结构,常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。
Kotlin中数据容器主要分为数组和集合。
15.1 数组
数组(Array)是一种最基本的数据结构,数组具有如下三个基本特性:
- 一致性。数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
- 有序性。数组中的元素是有序的,通过下标访问,数组下标从零开始的。
- 不可变性。数组一旦初始化,则长度(数组中元素的个数)不可变。
为兼容Java中数组和提供访问效率,Kotlin中数组分为:对象数组和基本数据类型数组。
15.1.2 基本数据类型数组
Kotlin编译器将元素是基本类型的Kotlin对象数组编译称为Java包装类数组,这样Java包装类数组与Java基本类型数组相比,包装类数组数据存储空间占用大,运算效率差。
为此,Kotlin提供8种基本数据类型数组,Kotling编译将这些基本数据类型数组编译为Java基本数据类型数组,例如Kotlin基本数据类型数组IntArray编译为Java数组int[]。
Kotlin基本数据类型数组与Java基本数据类型数组对应关系
Kotlin基本数据类型数组 | Java基本数据类型数组 |
---|---|
ByteArray | byte[] |
ShortArray | short[] |
IntArray | int[] |
LongArray | long[] |
FloatArray | float[] |
DoubleArray | double[] |
CharArray | char[] |
BooleanArray | boolean[] |
每一个基本数据类型数组的创建都有三种方式,下面以Int类型为例:
- intArrayOf(vararg elements:Int)工厂函数。通过对应的工厂函数,vararg表明参数是可变参数,是lnt数据列表。
- IntArray(size:lnt)构造函数。size参数指定数组大小创建元素类型为lnt的数组,数组中的元素为该类型默认值,Int怕的默认值是0。
- IntArray(size:Int,init:(Int)->lnt)构造函数。通过size参数指定数组大小,init参数指定一个用于初始化元素的函数,参数经常使用Lambda表达式。
下面通过一个示例介绍一下基本数据类型数组:
package com.dingjiaxiong
fun main() {
// 静态初始化
val array1 = shortArrayOf(20, 10, 50, 40, 30)
// 动态初始化
val array2 = CharArray(3)
array2[0] = 'C'
array2[1] = 'B'
array2[2] = 'D'
// 动态初始化
val array3 = IntArray(10) {
it * it }
// 遍历数组
for (item in array3) {
print(item)
print(" ")
}
println()
for (idx in array2.indices) {
print(array2[idx])
print(" ")
}
}
通过上面的示例会发现比较对象数组和基本数据类型数组的创建过程都有三种类似方式。