一、集合
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") }
三、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())
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树集合Collection接口19581 人正在系统学习中