一、集合
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")
2.2 创建可变List( MutableList)
使用索引值重写数组的值。数组的值是可以修改的,所以把它称为可变数组。要创建可变列表,可以使用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())
2.3 List和MutableList相互转换
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())
2.4 mutator函数
-
能修改可变列表的函数有个统一的名字: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())
2.5 List集合遍历
-
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")
}
}
三、Set集合
不允许有重复元素 list可以用list.distinct() 等价于set
3.1 创建只读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")
3.2 创建可变Set
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)
四、Map集合
4.1 创建只读Map
-
使用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))
4.2 创建可变Map
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)
4.3 遍历Map
2种forEach遍历Map
//方法一:(it)
mutableMap1.forEach {
print("$it key=="+it.key+" ,value==${it.value} \n")
}
//方法二 (key,value):
mutableMap1.forEach { key, i ->
print(key+"---$i , ")
}