【Kotlin】学习笔记(四)集合类

一、List

在Java中,我们可以使用ArraryList,当然在Kotlin中也可以这么做:

1
2
3
4
val list1 = ArraryList<String>()
list1.add("Apple")
list1.add("Banana")
list1.add("Pear")

Kotlin中提供了两种内置函数 listOf()mutableListOf() 来简化初始化List的写法。

前者创建的List不可修改,而后者可修改:

1
2
3
4
5
val list1 = listOf("Apple", "Banana", "Pear")
//list1.add("Grape") //报错

val list2 = mutableListOf("Kim", "Sam", "Lisa")
list2.add("Jack") // 正确

我们可以用for-in循环遍历这些集合

1
2
3
for (fruit in list1) {
println(fruit)
}

二、Set

Set集合与List集合的用法相近,只是Set集合不能存放重复元素。

Kotlin中同样提供了两种内置函数 setOf()mutableSetOf()

1
2
3
4
5
6
val set = mutableSetOf("Apple", "Apple", "Banana", "Pear")
set.add("Apple") //重复元素,不添加
set.add("Grape") //非重复,添加成功
for (fruit in set) {
println(fruit)
}

三、Map

与其他语言一样,Map是一种以键值对形式的的数据结构,Java中的通常做法是创建一个HashMap实例,用put()get()去操作这个Map:

1
2
3
4
val map1 = HashMap<String, Int>()
map1.put("Apple", 1)
map1.put("Banana", 2)
map1.put("Pear", 3)

在Kotlin中,我们也可以使用类似JavaScript的下标语法:

1
2
map1["Grape"] = 4
val num = map1["Apple"]

当然,Kotlin中也提供了 mapOf()mutableMapOf()来简化:

1
2
3
4
5
val map1 = mapOf(
"Apple" to 1
"Banana" to 2
"Pear" to 3
)

其中的 to 并不是关键字,而是一个 infix函数

同样,可以使用for循环去遍历Map

1
2
3
for ((fruit, number) in map1) {
println("fruit is " + fruit + ", number is " + number)
}

四、集合常用lambda操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
val li = listOf(1,3,5,2,4)

val a = li.maxBy{it} //最大值,同理有minBy
println("maxBy: %a") // 5

val b = li.filter{it > 3} // 过滤器
println("filter: ")
for (n in b) {
print("$n ") // 5 4
}
println()

val c = li.sortedBy{it} // 升序排序,加-号为降序
println("sortBy: ")
for (n in c) {
print("$n ") // 1 2 3 4 5
}
println()

val d = li.map{it * 2} //将集合内的值改为另一个值
println("map: ")
for (n in d) {
print("$n ") // 2 6 10 4 8
}
println()

val e = li.mapIndexed{ //同上,但lambda参数带下标
index, value -> index * value
}
println("map: ")
for (n in e) {
print("$n ") // 0 3 10 6 16
}

【Kotlin】学习笔记(四)集合类
https://chordfish-k.github.io/2023/02/04/kotlin/kotlin-20230204/
作者
超弦鱼
发布于
2023年2月4日
许可协议