【Kotlin 初学者】集合

举报
帅次 发表于 2021/12/23 23:32:22 2021/12/23
2.4k+ 0 1
【摘要】 作者简介:CSDN博客专家、华为云享专家认证 系列专栏:Kotlin 初学者 学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。 目录 一、集合 二、List集合 2.1 创建只读List 2.2 创建可变List 2.3 List和MutableList相互转换 2.4 mutator函数 ...

作者简介: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中大致分为两种不同集合的形式。它们是:

  • 只读集合(不变)

  • 可变集合

集合类型 只读 可变
List listOf mutableListOf
arrayListOf
Set setOf mutableSetOf
hashSetOf
linkedSetOf
sortedSetOf
Map mapOf mutableMapOf
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())
  
 

文章来源: shuaici.blog.csdn.net,作者:帅次,版权归原作者所有,如需转载,请联系作者。

原文链接:shuaici.blog.csdn.net/article/details/122103142

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。