美文网首页
kotlin基础--List、Set、Map

kotlin基础--List、Set、Map

作者: aruba | 来源:发表于2021-08-23 09:24 被阅读0次

    上次我们学习了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 }
    }
    

    相关文章

      网友评论

          本文标题:kotlin基础--List、Set、Map

          本文链接:https://www.haomeiwen.com/subject/cnukiltx.html