Kotlin 初学者集合

Posted 帅次

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 初学者集合相关的知识,希望对你有一定的参考价值。

作者简介:CSDN博客专家、华为云享专家认证

系列专栏:Kotlin 初学者

学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。

目录

一、集合

二、List集合

2.1 创建只读List

2.2 创建可变List

2.3 List和MutableList相互转换

2.4 mutator函数

2.5 List集合遍历

三、Set集合

3.1 创建只读Set

3.2 创建可变Set

四、Map集合

4.1 创建只读Map

4.2 创建可变Map

4.3 遍历Map

五、集合转换


一、集合

        Kotlin中的集合用于在一个单元中存储一组相关对象。通过使用集合,可以存储,检索操作和聚合数据,也可以作为值参传给函数。

Kotlin中大致分为两种不同集合的形式。它们是:

  • 只读集合(不变)

  • 可变集合

集合类型只读可变
ListlistOfmutableListOf
arrayListOf
SetsetOfmutableSetOf
hashSetOf
linkedSetOf
sortedSetOf
MapmapOfmutableMapOf
hashMapOf
linkedMapOf
sortedMapOf

二、List集合

        允许有重复元素

2.1 创建只读List

fun main() 
    //创建List
    var data = listOf("Flutter","Java","Kotlin")
    //元素获取
    println(data[2])//Kotlin

数组越界

  • 使用List.getOrElse()函数

  • 使用List.getOrNull()函数

    var data = listOf("Flutter","Java","Kotlin")
    //数组越界
//    println(data[3])//抛异常:ArrayIndexOutOfBoundsException

    //避免数据越界
    //1、当没有这个元素,执行lambda表达式
    println(data.getOrElse(3)  "android" )//Android
    //2、当没有这个元素,返回null
    println(data.getOrNull(3))//null
    //2.1 使用空合并操作符,返回空时提供默认值
    println(data.getOrNull(3) ?: "Android")//Android

2.2 创建可变List

        使用索引值重写数组的值。数组的值是可以修改的,所以把它称为可变数组。要创建可变列表,可以使用mutableListOf函数。

    //创建可变数组
    var mutableData = mutableListOf("Flutter", "Java", "Kotlin")

        可变数组的增删改查

    //新增元素ios
    mutableData.add("iOS")
    println(mutableData.toString())//[Flutter, Java, Kotlin, iOS]
    //删除元素Flutter
    mutableData.remove("Flutter")
    println(mutableData.toString())//[Java, Kotlin, iOS]
    //在下标为1位置新增元素鸿蒙
    mutableData.add(1,"鸿蒙")
    println(mutableData.toString())//[Java, 鸿蒙, Kotlin, iOS]
    //修改下标为1元素内容
    mutableData.set(1,"鸿蒙2.0")
    println(mutableData.toString())//[Java, 鸿蒙2.0, Kotlin, iOS]

2.3 List和MutableList相互转换

        List还支持使用toList和toMutableList函数动态实现只读列表和可变列表的相互转换

    //创建只读数组
    var data = listOf("Flutter", "Java", "Kotlin")
    //创建可变数组
    var mutableData = mutableListOf("Flutter", "Java", "Kotlin")
    //MutableList转List
    var data2:List<String> = mutableData.toList()
    //List转MutableList
    var mutableData2:MutableList<String> =  data.toMutableList()

2.4 mutator函数

  • 能修改可变列表的函数有个统一的名字:mutator函数

  • 添加元素运算符与删除元素运算符(都属于mutator函数)

  • 基于lambda表达式指定的条件删除元素

    //使用mutator函数
    mutableData = mutableListOf("Flutter", "Java", "Kotlin")
    //mutator:新增元素iOS
    mutableData += "iOS"
    println(mutableData)//[Flutter, Java, Kotlin, iOS]
    //mutator:删除元素Flutter
    mutableData -= "Flutter"
    mutableData.remove("Flutter")
    println(mutableData)//[Java, Kotlin, iOS]
    
    //使用lambda表达式删除元素
    //先在lambda判断元素是否存在,当元素存在返回true,则删除元素
    mutableData.removeIf  it.contains("iOS") 
    println(mutableData)//[Java, Kotlin]

2.5 List集合遍历

  • for..in

  • forEach

  • forEachIndexed

    //List集合遍历
    //方法一:for..in
    for (md in mutableData)
        println("①-$md")
    
    //方法二:forEach
    mutableData.forEach 
        println("②-$it")
    
    //方法三:forEachIndexed
    mutableData.forEachIndexed  index, s ->
        println("③-$index-$s")
    

三、Set集合

        不允许有重复元素

3.1 创建只读Set

    //创建只读Set
    var set = setOf("Flutter", "Java", "Kotlin","Java","Flutter")
    println(set.size)//3,因为后面2项与前面重复
    //元素获取
    println(set.elementAt(2))//Kotlin
    //这里的安全操作和List类似。
    println(set.elementAtOrElse(3)  "Set-Android" )//Set-Android
    println(set.elementAtOrNull(3) ?: "Set-Android")//Set-Android

3.2 创建可变Set

    //创建可变Set
    var mset = mutableSetOf("Flutter","Java", "Kotlin","Java","Flutter")
    //这里增删改查也跟List类似就不多描述了。
    mset.add("iOS")
    println(mset)//[Flutter, Java, Kotlin, iOS]
    mset.remove("Java")
    println(mset)//[Flutter, Kotlin, iOS]

四、Map集合

4.1 创建只读Map

  • 使用to函数将它左边和右边的值转化成一对Pair。

  • 直接使用Pair

    //创建只读Map
    //方法一:
    var map = mapOf("Kotlin" to 12,"Java" to 32,"Flutter" to 8)
    println(map)//Kotlin=12, Java=32, Flutter=8
    //方法二:
    map = mapOf(Pair("Kotlin",15),Pair("Java",28),Pair("Flutter",55))
    println(map)//Kotlin=15, Java=28, Flutter=55

    //获取值
    println(map["Kotlin"])//15
    println(map.get("Java"))//28
    println(map.getOrElse("iOS")  "Android" )//Android
    println(map.getOrDefault("iOS", 100))//100

4.2 创建可变Map

    //创建可变Map
    var mapM = mutableMapOf("Kotlin" to 19, "Java" to 51, "Flutter" to 15)
    println(mapM)//Kotlin=19, Java=51, Flutter=15
    //添加元素
    mapM.put("iOS", 36)
    println(mapM)//Kotlin=19, Java=51, Flutter=15, iOS=36
    //删除元素Flutter
    mapM -= "Flutter"
    println(mapM)//Kotlin=19, Java=51, iOS=36
    //没有Android元素返回帅次
    println(mapM.getOrElse("Android")  "帅次" )//帅次
    println(mapM)//Kotlin=19, Java=51, iOS=36
    //没有Vs元素,则添加Vs元素
    mapM.getOrPut("Vs")  20 
    println(mapM)//Kotlin=19, Java=51, iOS=36, Vs=20
    // //没有Ap元素返回94
    println(mapM.getOrDefault("Ap", 94))
    println(mapM)//Kotlin=19, Java=51, iOS=36, Vs=20

4.3 遍历Map

        2种forEach遍历Map

    map = mapOf(Pair("Kotlin",15),Pair("Java",28),Pair("Flutter",55))
    //遍历Map
    //方法一:
    map.forEach 
        println("一:$it.key - $it.value")
    
    //方法二:
    map.forEach  (s, i) ->
        println("二:$s - &i")
    

五、集合转换

    //集合转换
    var list = listOf("Flutter", "Java", "Kotlin", "Java", "Flutter")
    println("未去重:$list")
    //对List的元素进行去重
    var listTo = list.toSet().toList()
    println("去重:$listTo")

    //kotlin提供的快捷函数一步到位
    println(list.distinct())

以上是关于Kotlin 初学者集合的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段 KOTLIN 中调用意图 [重复]

如何使用 kotlin 实现分页

如何在 Kotlin 片段内的按钮之间切换片段?

kotlin-从一个片段更改多个片段的小数位

如何更改片段 Kotlin

如何在kotlin的片段内显示网格视图?