关键词:
作者简介:CSDN博客专家、华为云享专家认证
系列专栏: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()函数
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初学者java和kotlin互操作(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用Kotlin2... 查看详情
kotlin初学者java和kotlin互操作(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用Kotlin2... 查看详情
初识kotlin之集合(代码片段)
Kotlin的集合是让我为之心动的地方,丰富的高阶函数帮助我们高效开发。今天介绍Kotlin的基础集合用法、获取集合元素的函数、过滤元素的函数、元素排序的函数、元素统计的函数、集合元素映射的函数、集合的交差并补集的函... 查看详情
kotlin初学者函数式编程(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、函数式编程概念1.1面向函数编程(FOP)1.2高阶函数1.3为什么使用... 查看详情
kotlin初学者函数式编程(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、函数式编程概念1.1面向函数编程(FOP)1.2高阶函数1.3为什么使用... 查看详情
kotlin初学者函数式编程(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、函数式编程概念1.1面向函数编程(FOP)1.2高阶函数1.3为什么使用... 查看详情
kotlin之集合排序(sortbysortbydescending)(代码片段)
1、Kotlin的集合排序 如果我们需要对一个集合里面的某个对象的一个字段进行排序,java的话需要实现一个比较器Comparator,Kotlin的针对集合里面的某个对象的一个字段进行排序非常简单,一行代码搞定。2、sortBy... 查看详情
kotlin初学者扩展-享受编程(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、介绍二、扩展函数2.1定义扩展函数2.1.4定义超类(Any)扩展函数2.1.5泛型扩展函... 查看详情
kotlin集合操作整理(代码片段)
一、转换类1.1转换为数组集合类提供了toIntArray()、toDoubleArray()、toFloatArray()、toBetArray()等函数,将集合转换成相应的数组。例:toIntArray()方法publicfunCollection<Int>.toIntArray():IntArrayvalresult=IntArray(size 查看详情
kotlin系列之数组与集合(代码片段)
今天说说kotlin中的数组和集合。我们前面说过kotlin是一门更加纯粹的面向对象的语言,所以kotlin中的数组与集合与Java中会有一些不同,但是为了性能考虑,同时因为kotlin的最终编译产物是运行在JVM之上的,还为了... 查看详情
kotlin初学者抽象类(代码片段)
抽象类 要定义一个抽象类,你需要在定义之前加上abstract关键字,即包含了具体的函数实现,也包含没有函数实现。//定义抽象类abstract class Book //未实现函数 abstract fun introduce():String //实... 查看详情
kotlin初学者只缘身在此山中(代码片段)
Kotlin初学者上篇文章说到学习Kotlin的两种方案先学基础语法再实践直接实践边用边学这次要否决直接实践边用边学了。下面咱先看一个简单的页面。就这么一个简单的页面,布局就不看了,今天的重点是Kotlin。上代码Kotli... 查看详情
kotlin初学者类的修饰符(代码片段)
类的修饰符 Kotlin类的修饰符包括classModifier和accessModifierclassModifier 类属性修饰符,标示类本身特性abstract//抽象类final//类不可继承,默认属性enum//枚举类open//类可继承,类默认是final的annotation//... 查看详情
kotlin初学者类和对象-类的修饰符(代码片段)
目录一、类和对象1.1前言1.2定义类1.2.1创建类1.2.2添加属性和函数1.2.3使用1.3field1.3.1计算属性1.4构造函数1.4.1主构造器1.4.2次构造器1.4.3初始化顺序1.4.4无构造器二、类的修饰符(类别)2.1classModifier2.2accessModifier一、类和对象1.1前言 ... 查看详情
kotlin初学者泛型简单剖析与使用(代码片段)
...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、泛型使用1.1泛型的优点1.2泛型类1.3泛型函数1.4泛型接口二、泛型类型约束三... 查看详情
kotlin初学者枚举类-密封类-数据类-继承(代码片段)
...xff1a;CSDN博客专家、华为云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、枚举类1.1创建枚举类1.2获取枚举相关信息1.3枚举类添加属性1.4定义函数1.5以... 查看详情
快速上手kotlin开发系列之集合操作符(代码片段)
本节接上一篇继续介绍Kotlin的集合操作符和如何自定义集合操作符。通过上一节Rxjava的示例,我们把同样的功能使用Kotlin来实现。Kotlin示例附上整体代码:funmain()vala=arrayOf("4","0","7","i","f",... 查看详情
kotlin和checkedexception(代码片段)
...为了Android的“钦定语言”,很多人听了之后热血沸腾。初学者们也开始注意到Kotlin,问出各种“傻问题”,很“功利”的问题,比如“现在学Kotlin是不是太早了一点?”结果引起一些Kotlin老鸟们的鄙视。当然也有人来信,请求... 查看详情