前言
在上一篇中,主要讲解了Kotlin字符串、数字类型、标准库函数对应的知识点。在本篇中,将会讲解Kotlin集合相关的知识点。
1. List集合
1.1 只读集合
val list = listOf("json", "jack", "jacky")
fun main{
//只读列表 ;不能写入,不能更改属性
println(list.getOrElse(10) {
"Unknown" })
println(list.getOrNull(10))
println(list.getOrNull(10) ?: "Unknown")
//list+="sdfdsf" 直接报错!
}
当使用 listOf
创建集合时,对应集合只能被读取,不能够被修改,强制修改直接报语法错误!
其他读取方法:
getOrElse
方法表示,如果没获取到,将返回else后面闭包的内容!getOrNull
方法表示,如果没获取到,将直接返回为null!
运行效果
Unknown
null
Unknown
这里我们看到。通过 listOf
创建集合只能被读取,不能被修改,那如果想要一个可修改的集合该怎样呢?
1.2 可修改集合
fun main{
val mutableList = mutableListOf("json", "jack", "jacky")
mutableList += "tom"
println(mutableList)
mutableList -= "jack"
println(mutableList)
mutableList.removeIf {
it.contains("tom") }
println(mutableList)
}
运行结果
[json, jack, jacky, tom]
[json, jacky, tom]
[json, jacky]
通过mutableListOf
定义的集合就可以对集合进行添加和删除。还可以调用一些逻辑性方法对集合进行修改。
1.3 遍历集合
val list = listOf("json", "jack", "jacky")
fun main() {
//遍历集合
for (s in list) {
println(s)
}
list.forEach {
println(it)
}
list.forEachIndexed {
index, s ->
println("$index $s")
}
}
运行结果
json
jack
jacky
json
jack
jacky
0 json
1 jack
2 jacky
都很简单,直接快速过掉。
1.4 集合解构
val list = listOf("json", "jack", "jacky")
fun main{
// 解构
val (origin, _, proxy) = list
//println("$_") 报错
println("$origin $proxy ")
}
运行效果
json jacky
注意看,这里使用了val ()
语法,将集合list
里面的数据拆分出来。第二个参数_
下划线,表示跳过当前解构,并且不可使用,强制使用将会报语法错误。
2. set集合
2.1 只读集合
fun main{
// 只读集合
val set = setOf("kotlin", "java", "scala")
set.elementAt(2).run(::println)
}
运行效果
scala
这里和上面一样,只能只读,不可修改。
2.2 可变集合
fun main{
val mutableSet = mutableSetOf("kotlin", "java", "scala")
mutableSet += "python"
println(mutableSet)
mutableSet.elementAtOrElse(10) {
"error" }.run(::println)
}
运行效果
[kotlin, java, scala, python]
error
当使用mutableSetOf
定义set集合时,可以对集合进行修改操作。
3. 集合去重
fun main{
listOf("json", "jack", "jacky", "tom", "jack")
.toSet()
.toList()
.run(::println)
listOf("json", "jack", "jacky", "tom", "jack").distinct().run(::println)
}
运行效果
[json, jack, jacky, tom]
[json, jack, jacky, tom]
众所周知, 在List集合中,可能会插入相同的数据,而在Set集合中,相同的键将会直接替换。所以当List集合中出现重复元素时,可以采用转set的方式,或者调用distinct
方法,方可去重!
4. map集合
fun main{
val map = mapOf("jack" to 20, "tom" to 15, "bob" to 32)
println(map)
//直接通过键获取对应的值
map["jack"].run(::println)
//也可通过getValue 方式
map.getValue("jack").run(::println)
//如果没找到,那么返回else闭包内容
map.getOrElse("aa") {
"error" }.run(::println)
//如果没找到,那么返回默认值
map.getOrDefault("err", 0).run(::println)
map.forEach {
(key, value) ->
println("$key, $value")
}
//强转为可修改集合
val mutableMap = map.toMutableMap()
mutableMap += "jimmy" to 30
mutableMap["Jimmy"] = 32
println(mutableMap.getOrPut("jimmy") {
18 })
println(mutableMap.getOrPut("Rose") {
18 })
println(mutableMap)
}
运行效果
{
jack=20, tom=15, bob=32}
20
20
error
0
jack, 20
tom, 15
bob, 32
从这个结果可知,当使用toMutable
关键字时,可将只读集合强转为可修改集合。
结束语
好了,本篇到这里就结束了,相信看完这篇的小伙伴对集合使用有所了解了。在下一篇中,将会对Kotlin的对象、接口、抽象类进行详解!