一、集合
Kotlin中的集合用于在一个单元中存储一组相关对象。通过使用集合,可以存储,检索操作和聚合数据,也可以作为值参传给函数。
Kotlin中大致分为两种不同集合的形式。它们是:
只读集合(不变)
可变集合
集合类型 只读 可变
List listOf mutableListOf/ arrayListOf
Set setOf mutableSetOf / hashSetOf / linkedSetOf / sortedSetOf
Map mapOf mutableMapOf / hashMapOf / linkedMapOf / sortedMapOf
二、List集合
- println("\n----------------list------------------------------------")
- var data1:List<String> = listOf("android","kotlin","java")//创建只读List
- println(data1[2])//获取元素
数组越界
使用List.getOrElse()函数
使用List.getOrNull()函数
- println("\n____________________数据越界异常_______________ArrayIndexOutOfBoundException______________________")
- //println(data1[3])//越界异常 ArrayIndexOutOfBoundException
-
- //避免数据越界
- //1、当没有这个元素,执行lambda表达式
- println(data1.getOrElse(3){"PHP"})//pHP
- //2、当没有这个元素,返回null
- println(data1.getOrNull(3))//null
- //2.1 使用空合并操作符,返回空时提供默认值
- println(data1.getOrNull(3) ?: "Vue")
使用索引值重写数组的值。数组的值是可以修改的,所以把它称为可变数组。要创建可变列表,可以使用mutableListOf函数。
- println("\n----------------可变list----mutableListOf-----------------------------")
- var mu = mutableListOf<String>("java","android","kotlin")
- mu.add("ios")
- mu.add(3,"php")
- println(mu.toString())
- mu.remove("java")
- println(mu.toString())
- mu.add(4,"php")
- mu.set(4,"sql")
- println(mu.toString())
List还支持使用toList和toMutableList函数动态实现只读列表和可变列表的相互转换。
- println("\n----------------可变list mutableList 和不可变list List 相互转化--------------------------------")
- var list= listOf<String>("java","android","ios")//创建只读数组
- var mutableList = mutableListOf("java","ios","php")//创建可变数组
- var list1:List<String> = mutableList.toList()//MutableList转List
- println(list1.toString())
- var mutableList2 = list.toMutableList() //List转MutableList
- println(mutableList2.toString())
能修改可变列表的函数有个统一的名字:mutator函数
添加元素运算符与删除元素运算符(都属于mutator函数)
基于lambda表达式指定的条件删除元素
-
- println("\n----------------使用mutator函数--------------------------------")
- val mutableListMutator = mutableListOf("android","java")
- println(mutableListMutator)
- mutableListMutator += "ios"
- println(mutableListMutator)
- mutableListMutator -= "java"
- println(mutableListMutator)
- mutableListMutator.remove("java")
- println(mutableListMutator)
- //使用lambda表达式删除元素
- //先在lambda判断元素是否存在,当元素存在返回true,则删除元素
- mutableListMutator.removeIf { it.contains("android") }
- println(mutableListMutator.toString())
for..in
forEach
forEachIndexed
- println("\n----------------遍历list-------------------------------")
- println()
- for (code in mutableList){
- println("遍历list in $code")
- }
- println()
- mutableList.forEach {
- println("***遍历list forEarch $it")
- }
- println()
- mutableList.forEachIndexed { index, code ->
- println("***遍历 list forEarchIndexed 下标 $index 值$code")
- }
- }
不允许有重复元素 list可以用list.distinct() 等价于set
- println("\n----------------创建 制度set------------------------------")
- var set1 = setOf<String>("java","android")
- println(set1.toString())
- println(set1.elementAt(1))
- 这里的安全操作和List类似。
- println(set1.elementAtOrElse(2){"ios"})
- println(set1.elementAtOrNull(3))
- println(set1.elementAtOrNull(3)?:"Flutter")
- println("\n----------------创建 可变set------------------------------")
- var set2 = mutableSetOf<String>("java","android","ios")
- set2.add("Flutter")//添加
- println(set2)
- set2.remove("java") //删除
- println(set2)
- set2.removeIf { it.contains("ios") }
- println(set2)
使用to函数将它左边和右边的值转化成一对Pair。
直接使用Pair
- println("\n____________创建 只读map mapof______________________")
- var map = mapOf<String,Int>("JAVA" to 2,"android" to 22,"ios" to 5)
- println(map)
- var map1 = mapOf<String,Int>(Pair("android",12), Pair("Flutter",20), Pair("java",20))
- println(map1.toString())
-
- //获取值
- println(map["android"])
- println(map.get("ios"))
- println(map1.getOrElse("ios"){"php"})//设置可以
- println(map1.getOrDefault("ios",2))
- println("\n—————————————————————可变map mutableMapOf—————————————————————")
- //创建可变Map
- var mutableMap1 = mutableMapOf(Pair("IOS",2), Pair("ANDROID",4))
- println(mutableMap1)
- //添加元素
- mutableMap1.put("java",2)
- mutableMap1.put("Flutter",9)
- println(mutableMap1)
- //删除元素Flutter
- mutableMap1.remove("Flutter")
- println(mutableMap1)
- //没有Android元素返回帅次
- println(mutableMap1.getOrElse("Android") { "大神" })//帅次
- println(mutableMap1.getOrDefault("22",22))
-
- //没有Vs元素,则添加Vs元素
- mutableMap1.getOrPut("Flutter"){45}
- println(mutableMap1)
2种forEach遍历Map
- //方法一:(it)
- mutableMap1.forEach {
- print("$it key=="+it.key+" ,value==${it.value} \n")
- }
-
- //方法二 (key,value):
- mutableMap1.forEach { key, i ->
- print(key+"---$i , ")
- }