全网最全面的由浅到深的Kotlin基础教程(三)
前言
本篇文章接着上一篇文章全网最全面的由浅到深的Kotlin基础教程(二)继续进阶学习kotlin,建议看完上一篇文章,再来看本篇文章。本篇文章讲解kotlin语言集合相关的语法。
1. List集合
1.1 List创建与元素获取
与java语言的List功能一致,比较简单,直接看示例代码:
fun main() {
//完整定义
//val listValue:List<String> = listOf<String>("A", "B", "C","D")
//类型推断后
val listValue = listOf("A", "B", "C","D")
//索引获取元素值,存在索引越界的异常情况
println(listValue[0])
//通过getOrElse或者getOrNull提前处理索引异常情况
println(listValue.getOrElse(4) {"默认值"})
println(listValue.getOrNull(4) ?: "超出索引界限")
}
1.2 可变List集合
上面listOf函数定义的集合,只能读取不能更改(没有添加,移除元素的接口),mutableListOf定义的集合为可变集合,可以添加移除元素。示例代码如下:
fun main() {
val list1 = mutableListOf("A","B", "C")
list1.add("D")
list1.remove("B")
println(list1)
//可变集合与不可变集合可以相互转换
println(list1.toList())
}
1.3 mutable函数,具有+= -=的运算符重载
kotlin可变集合实现了+= -=的运算符重载,示例代码如下:
fun main() {
val list1 = mutableListOf("A", "B", "C")
list1 += "D"
list1 += "E"
println(list1)
//removeIf 带条件移除元素
list1.removeIf { it.contains("A") }
println(list1)
}
运行结果如下:
1.4 List集合遍历
List集合有三种遍历方式,示例代码如下:
fun main() {
val list = listOf(1, 2, 3, 4, 5, 6)
for (i in list) {
print("$i ")
}
println()
list.forEach(){
print("$it ")
}
println()
list.forEachIndexed(){ i: Int, i1: Int ->
print(" index=$i, item=$i1")
}
}
1.5 解构语法
kotlin集合支持解构语法,如果某个元素不想解构,可以用-占位,提高效率,示例代码如下:
fun main() {
val list = listOf(1, 2, 3)
// 解构造语法
val(v1,v2,v3) = list
println("$v1,$v2,$v3")
//过滤元素
var(_,v4,v5) = list
println("$v4,$v5")
}
运行结果如下:
2. Set集合
2.1 Set创建与元素的获取
Set集合相比List集合,不会出现重复元素,示例代码如下:
fun main() {
//Set 不会有重复元素,有重复的会自动去掉
val set1 = setOf("A", "B", "C", "C")
println(set1)
println(set1.elementAt(0))
println(set1.elementAtOrElse(3) { "越界了" })
println(set1.elementAtOrNull(3)?:"越界干啥")
}
运行结果如下:
2.2 可变Set集合
与List集合一样,只有可变Set才能添加,移除元素,示例代码如下:
fun main() {
var mutableSetOf = mutableSetOf("sun", "sun1", "sun2")
mutableSetOf.add("sun3")
println(mutableSetOf)
}
3. 集合去重
- 可以先把List集合转为Set集合,实现去重,然后再把Set集合转回List集合
- 通过distinct函数实现去重
示例代码如下:
fun main() {
var mutableListOf = mutableListOf("A", "B", "C", "C")
println(mutableListOf)
//List转Set集合,去重
var toSet = mutableListOf.toSet()
println(toSet)
println(mutableListOf.toSet().toList())
//distinct去重
println(mutableListOf.distinct())
}
运行结果如下:
4. 数组类型
kotlin数组创建示例代码如下:
fun main() {
var intArrayOf = intArrayOf(1, 2, 3, 4)
println(intArrayOf[0])
println(intArrayOf.elementAtOrElse(4) { -1 })
println(intArrayOf.elementAtOrNull(4)?: -2)
//集合转数组
var listOf = listOf(1, 2, 3)
var toIntArray = listOf.toIntArray()
println(toIntArray)
//对象数组
var arrayOf : Array<File> = arrayOf(File("A.txt"), File("B.txt"))
}
5. Map集合
5.1 Map创建
Map和java中键值对意义一样,Map创建方式,直接上示例代码:
fun main() {
val map1 = mapOf("a" to 2, "b" to 6)
val map2 = mapOf(Pair("a", 2), Pair("B", 6))
}
5.2 读取map的值
fun main() {
val map1 = mapOf("a" to 2, "b" to 6)
//方式一 []
println(map1["a"])
println(map1["c"]) //找不到返回null
//方式二 getOrDefault 找不到给一个默认值
println(map1.getOrDefault("a", -1))
//方式三 getOrElse 找不到执行一个匿名函数(lambda表达式)
println(map1.getOrElse("b") { -1 })
//方式四 找不到会crash,避免使用该方式
println(map1.getValue("a"))
println(map1.getValue("c"))
}
5.3 遍历Map
几种遍历Map的示例代码如下:
fun main() {
val map1 = mapOf("a" to 2, "b" to 6)
map1.forEach {
println("key=${it.key},value=${it.value}")
}
println()
map1.forEach { key, value ->
println("key=$key,value=$value")
}
println()
//推荐
map1.forEach { (key, value) ->
println("key=$key,value=$value")
}
println()
for (entry in map1) {
println("key=${entry.key},value=${entry.value}")
}
}
5.4 可变Map集合
与Set,List集合一样,只有可变的Map集合才能添加移除元素,示例代码如下:
fun main() {
val map1 = mutableMapOf("a" to(1), "b" to 2)
//添加一个键值对
map1 += "c" to 3
//移除一个键值对
map1 -= "a"
//如果没有就put进去一个key value
map1.getOrPut("d") { 4 }
map1.forEach { (key, value) ->
println("key=$key,value=$value")
}
}