zl程序教程

您现在的位置是:首页 >  Java

当前栏目

kotlin基础--List、Set、Map

2023-04-18 12:32:26 时间

上次我们学习了kotlin的字符串操作、数字类型、标准库函数,接下来我们来学习集合,和其他变量类型一样,集合也分为可变和只读

一、List

1.List集合创建与元素获取

调用listOf函数创建集合,我们可以通过和数组一样的方式: "变量[下标]" 来获取元素,或者使用get函数获取

fun main() {
    //listOf创建List集合
    var list = listOf("张三", "李四", "王五")
    
    println(list[0])
    println(list.get(1))
}

kotlin还提供了安全索引取值函数,使用它们就不会下标溢出了 getOrElse:如果不存在,则返回lambda结果

fun main() {
    //listOf创建List集合
    var list = listOf("张三", "李四", "王五")

    println(list.getOrElse(5) { "empty" })
}

getOrNull:如果不存在,返回null

fun main() {
    //listOf创建List集合
    var list = listOf("张三", "李四", "王五")

    println(list.getOrNull(10) ?: "is null")
}
2.可变List集合

调用mutableListOf创建可变list,List不支持增加元素和删除元素,MutableList支持

fun main() {
    //调用mutableListOf创建可变list
    val mutableList = mutableListOf("张三", "李四", "王五")

    mutableList.remove("张三")
    mutableList.add("赵六")
    println(mutableList.getOrElse(1) { "empty" })
    println(mutableList.getOrNull(10) ?: "is null")
}

kotlin还支持利用toList和toMutableList函数实现可变和只读列表的转换

fun main() {
    //调用mutableListOf创建可变list
    val mutableList = mutableListOf("张三", "李四", "王五")

    val list = mutableList.toList()
    val muList = list.toMutableList()
}

kotlin支持和c/c++一样的运算符重载,所以我们可以用 +号 代替 add函数, - 号 代替 remove函数

fun main() {
    //调用mutableListOf创建可变list
    val mutableList = mutableListOf("张三", "李四", "王五")

    mutableList += "孙七"
    mutableList -= "王五"
}

还可以基于lambda表达式指定的条件删除元素

fun main() {
    //调用mutableListOf创建可变list
    val mutableList = mutableListOf("张三", "李四", "王五")

    mutableList.removeIf { it.contains("四") }
}
3.遍历集合

kotlin新增了三种方式遍历集合

fun main() {
    //调用mutableListOf创建可变list
    val mutableList = mutableListOf("张三", "李四", "王五")

    for (item in mutableList) {
        println(item)
    }

    mutableList.forEach { println(it) }

    mutableList.forEachIndexed { index, s ->
        println("$index $s")
    }
}
4.解构

之前我们提到过,kotlin允许在一个表达式中给多个变量赋值 可以用"_"过滤不想要的元素

fun main() {
    //调用mutableListOf创建可变list
    val mutableList = mutableListOf("张三", "李四", "王五")

    val (a, _, c) = mutableList
}

二、Set

1.Set创建与元素获取

通过setOf创建,通过elementAt传入下标获取元素

fun main() {
    val set = setOf("张三", "李四", "王五")
    
    println(set.elementAt(1))
}
2.可变Set

通过mutableSetOf创建,其他的和list一样

fun main() {
    val set = mutableSetOf("张三", "李四", "王五")

    set += "赵四"
    println(set.elementAt(1))
}
3.List转Set,去除重复元素,也可以使用distinct函数
fun main() {
    val list = listOf("张三", "李四", "王五").toSet().toList()
    val list2 = listOf("张三", "李四", "王五").distinct()
}

三、数组

用法和Java相同,也支持新增的遍历方式

四、Map

1.map创建

使用mapOf创建,使用 to 表示键值对,to实际就是调用了实例化了一个Pair类

fun main() {
    val map = mapOf("张三" to 8, "赵四" to 16, "王五" to 20)

    mapOf(Pair("张三", 8), Pair("赵四", 16))
}
2.读取map的值

[]取值运算符,读取key对应的值,不存在返回null getValue,读取key对应的值,不存在抛异常 getOrDefault,读取key对应的值,不存在返回默认值 getOrElse,读取key对应的值,不存在返回lambda结果

fun main() {
    val map = mapOf("张三" to 8, "赵四" to 16, "王五" to 20)

    println(map["张三"])
    println(map.getValue("张三"))
    println(map.getOrDefault("张三", 0))
    println(map.getOrElse("张三") { "没有对应的key" })
}
3.遍历
fun main() {
    val map = mapOf("张三" to 8, "赵四" to 16, "王五" to 20)

    map.forEach {
        println("${it.key} ${it.value}")
    }

    map.forEach { (key, value) ->
        println("$key $value")
    }
}
4.可变Map

通过mutableMapOf创建,新增getOrPut获取元素,如果不存在,则存入

fun main() {
    val map = mutableMapOf("张三" to 8, "赵四" to 16, "王五" to 20)

    map.getOrPut("孙六") { 0 }
}