【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 人正在系统学习中

相关文章
|
分布式计算 Java 数据安全/隐私保护
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(下 )
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(下)
76 0
|
7月前
|
存储 API Kotlin
Kotlin中的List集合
Kotlin中的List集合
|
7月前
|
存储 API Kotlin
Kotlin中的Map集合
Kotlin中的Map集合
113 0
|
7月前
|
存储 API Kotlin
Kotlin中的Set集合
Kotlin中的Set集合
|
Java Kotlin
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(上)
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(上)
69 0
|
Kotlin
Kotlin 中List集合,Set集合,Map集合,数组的详解
Kotlin 中List集合,Set集合,Map集合,数组的详解
103 0
|
XML 算法 IDE
Kotlin 基础 | 望文生义的 Kotlin 集合操作
Kotlin 基础 | 望文生义的 Kotlin 集合操作
66 0
|
存储 Java Kotlin
Kotlin 进阶之路(四) 集合
Kotlin 进阶之路(四) 集合
170 0
|
存储 Java Kotlin
Kotlin常用Collection集合操作整理
本篇记录了`Kotlin`常用集合的相关操作,用以熟练使用`Kotlin`里的相关集合。集合接口与相关函数位于` kotlin.collections` 包中。
371 0
|
Kotlin
Kotlin集合(思维导图版)
Kotlin集合(思维导图版)
332 0
Kotlin集合(思维导图版)