Kotlin 创建数组其实就是创建 Array<T>
类的实例,所以我们既可以通过 Array<T>
类的构造器来创建数组,也可以通过系统提供的工具函数来创建:
通过 Array 的构造函数创建数组
Array 类的构造函数如下:
public inline constructor(size: Int, init: (Int) -> T)
第一个参数是数组大小,第二个参数是通过 Lambda 表达式来动态计算数组的元素:
fun main() {
//创建数组,长度为3,从下标0开始,每个元素为 下标*2,因为是字符串数组,再通过 toString 转为 字符串
var arr = Array<String>(3, {(it * 2).toString()})
for (i in arr) {
println(i)
}
}
//执行结果:
0
2
4
Kotlin 还提供了其他一些用于创建原声数据类型数组的类:
每个原始数据类型都有一个对应的 toXxx() 方法可以转化为其它的类型
创建指定元素的数组
arrayOf()
方法用于创建指定元素的数组,类似于 Java 中的静态初始化:
fun main() {
var arr = arrayOf("A","B","C")
for (i in arr) {
print("$i ")
}
}
//输出结果:A B C
创建内容为空的数组
arrayOfNull()
用来创建元素为 null 的数组,因为事先没有元素存在,所以系统无法判断数组类型,需要我们显式声明:
fun main() {
var arr = arrayOfNulls<String>(10)
arr[5] = "张三"
for (i in arr) {
print("$i ")
}
}
//输出结果:null null null null null 张三 null null null null
创建内容为空,长度为0的空数组
我也不知道这玩意儿有啥用
跟 Java 一样,可以使用 for 循环来遍历数组
fun main() {
var arr = arrayOf("A","B","C","D")
for (str in arr){
print("$str ")
}
}
//输出结果:A B C D
当然也可以通过下标来遍历:
fun main() {
var arr = arrayOf("A","B","C","D")
for (index in arr.indices){
print("${arr[index] } ")
}
}
//输出结果:A B C D
和 Java 一样,Kotlin 中的集合也有由 Collection
和 Map
两个接口派生出来的,但是和 Java 不同的是,在 Java 中,我们可以向集合中添加数据、删除数据、修改数据,而在 Kotlin 中,集合是分为 可变集合
和 不可变集合
两种,只有可变集合才可以增删改,而不可变集合只能获取数据。
为了区分可变和不可变,在 Kotlin 中 Collection 派生了 MutableCollection
子接口,而这个接口又派生了 MutableSet
和 MutableList
两个接口,这两个接口派生的一系列实现代表了可变集合。
Collection 直接派生了 Set 和 List 两个接口,这两个接口派生的一系列实现代表可不可变接口。
Map 直接派生了 MutableMap,表示可变 Map
下图展示了 Kotlin 主要集合接口和类
Kotlin 在 JVM 平台上并没有真正实现 HashSet、LinkedHashSet、ArrayList 等这些类,而是直接借用了 Java 中的这些集合类,另外又添加了一些方法,让这些集合使用起来更加方便
Set 集合是无序、不能重复、相同类型元素的构成的集合。
在 Kotlin 中,Set 集合的接口分为:
创建不可变集合的方法:
创建可变集合的方法:
因为它们是可变的,所以 MutableSet 接口提供了一些可以修改集合内容的方法:
因为不可变 Set 集合并不是实现自 MutableSet 接口,所以没有这些可以修改集合元素的方法
List 集合是有序的、可以重复的、类型相同的数据集合。
在 Kotlin 中,List 和 Set 差不多,同样也是可变 List:MuableList 和 不可变 List:List,以及 Java 提供的 ArrayList 和 LinkedList。
创建可变 List 的方法:
创建不可变 List 的方法
Map 是使用 key/value
形式存储数据的集合类型,key 不允许重复,value 允许重复。
Kotlin 中的 Map 集合同样也分为可变和不可变:
创建不可变 Map 集合
创建可变 Map
这里只是列出了常用的 List 、Set 和 Map,像一些 LinkedList 之类的,因为不常使用,就不一一列举了。