【Kotlin 初学者】集合

举报
帅次 发表于 2021/12/23 23:32:22 2021/12/23
【摘要】 作者简介: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


  
  1. fun main() {
  2.     //创建List
  3.     var data = listOf("Flutter","Java","Kotlin")
  4.     //元素获取
  5.     println(data[2])//Kotlin
  6. }

数组越界

  • 使用List.getOrElse()函数

  • 使用List.getOrNull()函数


  
  1.     var data = listOf("Flutter","Java","Kotlin")
  2.     //数组越界
  3. //    println(data[3])//抛异常:ArrayIndexOutOfBoundsException
  4.     //避免数据越界
  5.     //1、当没有这个元素,执行lambda表达式
  6.     println(data.getOrElse(3) { "Android" })//Android
  7.     //2、当没有这个元素,返回null
  8.     println(data.getOrNull(3))//null
  9.     //2.1 使用空合并操作符,返回空时提供默认值
  10.     println(data.getOrNull(3) ?: "Android")//Android

2.2 创建可变List

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


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

        可变数组的增删改查


  
  1.     //新增元素iOS
  2.     mutableData.add("iOS")
  3.     println(mutableData.toString())//[Flutter, Java, Kotlin, iOS]
  4.     //删除元素Flutter
  5.     mutableData.remove("Flutter")
  6.     println(mutableData.toString())//[Java, Kotlin, iOS]
  7.     //在下标为1位置新增元素鸿蒙
  8.     mutableData.add(1,"鸿蒙")
  9.     println(mutableData.toString())//[Java, 鸿蒙, Kotlin, iOS]
  10.     //修改下标为1元素内容
  11.     mutableData.set(1,"鸿蒙2.0")
  12.     println(mutableData.toString())//[Java, 鸿蒙2.0, Kotlin, iOS]

2.3 List和MutableList相互转换

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


  
  1.     //创建只读数组
  2.     var data = listOf("Flutter""Java""Kotlin")
  3.     //创建可变数组
  4.     var mutableData = mutableListOf("Flutter""Java""Kotlin")
  5.     //MutableList转List
  6.     var data2:List<String> = mutableData.toList()
  7.     //List转MutableList
  8.     var mutableData2:MutableList<String> =  data.toMutableList()

2.4 mutator函数

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

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

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


  
  1.     //使用mutator函数
  2.     mutableData = mutableListOf("Flutter""Java""Kotlin")
  3.     //mutator:新增元素iOS
  4.     mutableData += "iOS"
  5.     println(mutableData)//[Flutter, Java, Kotlin, iOS]
  6.     //mutator:删除元素Flutter
  7.     mutableData -= "Flutter"
  8.     mutableData.remove("Flutter")
  9.     println(mutableData)//[Java, Kotlin, iOS]
  10.     
  11.     //使用lambda表达式删除元素
  12.     //先在lambda判断元素是否存在,当元素存在返回true,则删除元素
  13.     mutableData.removeIf { it.contains("iOS") }
  14.     println(mutableData)//[Java, Kotlin]

2.5 List集合遍历

  • for..in

  • forEach

  • forEachIndexed


  
  1.     //List集合遍历
  2.     //方法一:for..in
  3.     for (md in mutableData){
  4.         println("①-$md")
  5.     }
  6.     //方法二:forEach
  7.     mutableData.forEach {
  8.         println("②-$it")
  9.     }
  10.     //方法三:forEachIndexed
  11.     mutableData.forEachIndexed { index, s ->
  12.         println("③-$index-$s")
  13.     }

三、Set集合

        不允许有重复元素

3.1 创建只读Set


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

3.2 创建可变Set


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

四、Map集合

4.1 创建只读Map

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

  • 直接使用Pair


  
  1.     //创建只读Map
  2.     //方法一:
  3.     var map = mapOf("Kotlin" to 12,"Java" to 32,"Flutter" to 8)
  4.     println(map)//{Kotlin=12, Java=32, Flutter=8}
  5.     //方法二:
  6.     map = mapOf(Pair("Kotlin",15),Pair("Java",28),Pair("Flutter",55))
  7.     println(map)//{Kotlin=15, Java=28, Flutter=55}
  8.     //获取值
  9.     println(map["Kotlin"])//15
  10.     println(map.get("Java"))//28
  11.     println(map.getOrElse("iOS") { "Android" })//Android
  12.     println(map.getOrDefault("iOS"100))//100

4.2 创建可变Map


  
  1.     //创建可变Map
  2.     var mapM = mutableMapOf("Kotlin" to 19"Java" to 51"Flutter" to 15)
  3.     println(mapM)//{Kotlin=19, Java=51, Flutter=15}
  4.     //添加元素
  5.     mapM.put("iOS"36)
  6.     println(mapM)//{Kotlin=19, Java=51, Flutter=15, iOS=36}
  7.     //删除元素Flutter
  8.     mapM -= "Flutter"
  9.     println(mapM)//{Kotlin=19, Java=51, iOS=36}
  10.     //没有Android元素返回帅次
  11.     println(mapM.getOrElse("Android") { "帅次" })//帅次
  12.     println(mapM)//{Kotlin=19, Java=51, iOS=36}
  13.     //没有Vs元素,则添加Vs元素
  14.     mapM.getOrPut("Vs") { 20 }
  15.     println(mapM)//{Kotlin=19, Java=51, iOS=36, Vs=20}
  16.     // //没有Ap元素返回94
  17.     println(mapM.getOrDefault("Ap"94))
  18.     println(mapM)//{Kotlin=19, Java=51, iOS=36, Vs=20}

4.3 遍历Map

        2种forEach遍历Map


  
  1.     map = mapOf(Pair("Kotlin",15),Pair("Java",28),Pair("Flutter",55))
  2.     //遍历Map
  3.     //方法一:
  4.     map.forEach {
  5.         println("一:${it.key} - ${it.value}")
  6.     }
  7.     //方法二:
  8.     map.forEach { (s, i) ->
  9.         println("二:$s - &i")
  10.     }

五、集合转换


  
  1.     //集合转换
  2.     var list = listOf("Flutter""Java""Kotlin""Java""Flutter")
  3.     println("未去重:$list")
  4.     //对List的元素进行去重
  5.     var listTo = list.toSet().toList()
  6.     println("去重:$listTo")
  7.     //kotlin提供的快捷函数一步到位
  8.     println(list.distinct())

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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