【Kotlin 初学者】集合

简介: 一、集合 Kotlin中的集合用于在一个单元中存储一组相关对象。通过使用集合,可以存储,检索操作和聚合数据,也可以作为值参传给函数。Kotlin中大致分为两种不同集合的形式。它们是:只读集合(不变)可变集合


一、集合


       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()函数

1.    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函数。


1.    //创建可变数组
    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")
    }


微信图片_20220524233823.png


三、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")
    }


微信图片_20220524234031.png


五、集合转换


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


微信图片_20220524234814.png


文章知识点与官方知识档案匹配,可进一步学习相关知识

Java技能树集合Collection接口19581 人正在系统学习中

相关文章
|
6月前
|
分布式计算 Java 数据安全/隐私保护
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(下 )
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(下)
33 0
|
6月前
|
Java Kotlin
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(上)
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(上)
32 0
|
8月前
|
Kotlin
Kotlin 中List集合,Set集合,Map集合,数组的详解
Kotlin 中List集合,Set集合,Map集合,数组的详解
59 0
|
存储 Java Kotlin
Kotlin 进阶之路(四) 集合
Kotlin 进阶之路(四) 集合
126 0
|
Kotlin
Kotlin集合(思维导图版)
Kotlin集合(思维导图版)
299 0
Kotlin集合(思维导图版)
|
Kotlin
kotlin集合操作符——总数操作符
关于集合的操作符,直接引用书上的内容,基本上总结的很好了。
111 0
|
Java Kotlin 编译器
Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
一.基本语法 Kotlin的很多概念跟JAVA是有类似的,所以我应该不会像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的 我们在IDEA中创建一个项目Kotlin02 1.
1593 0
|
23天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
24天前
|
数据库 Android开发 开发者
构建高效Android应用:Kotlin协程的实践指南
【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。
|
1月前
|
调度 数据库 Android开发
构建高效Android应用:Kotlin协程的实践与优化
在Android开发领域,Kotlin以其简洁的语法和平台友好性成为了开发的首选语言。其中,Kotlin协程作为处理异步任务的强大工具,它通过提供轻量级的线程管理机制,使得开发者能够在不阻塞主线程的情况下执行后台任务,从而提升应用性能和用户体验。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在实际的Android应用中有效地使用协程进行网络请求、数据库操作以及UI的流畅更新。同时,我们还将讨论协程的调试技巧和常见问题的解决方法,以帮助开发者避免常见的陷阱,构建更加健壮和高效的Android应用。
36 4