1、Kotlin List集合
fun main() {
val list = listOf("张三", "lisi", "wangwu")
//普通取值方式 索引,有数组下标越界的风险
println(list[0])
println(list[1])
println(list[2])
//防止崩溃取值方式
println(list.getOrElse(1) { "越界" })
println(list.getOrElse(3) { "越界" })
println(list.getOrNull(3))
//一般 getOrNull +空操作符
println(list.getOrNull(222) ?: "你越界了")
}
2、Kotlin List可变集合与不可变集合转化
//TODO 可变list MutableList
fun main() {
//可变集合
val list: MutableList<String> = mutableListOf("张三", "lisi", "wangwu")
list.add("zhaoliu")
list.remove("张三")
//不可变集合to可变集合,不能add,remove
val list2 = listOf("zhangsan", "lisi", "wangwu")
val list3 = list2.toMutableList()
list3.add("aaa")
list3.remove("0")
println(list3)
//可变集合转为不可变集合
val list4 = mutableListOf('A', 'b', 'C')
val list5 = list4.toList()
}
3、Kotlin List removeif
//TODO removeIf
fun main() {
val list = mutableListOf("张三","lisi","wangwu","zhaoliu")
list+="李四" //背后就是运算符重载
list+="王五"
list-="lisi"
println(list)
//removeif
// list.removeIf{true} //true 自动遍历可变几个,进行一个一个元素删除
list.removeIf{it.contains("li")}//过滤所有元素,只要有li得元素删除
println(list)
}
4、Kotlin List遍历
//TODO Kotlin集合得遍历
fun main() {
val list = listOf(1, 2, 3, 4, 5, 6)
println(list) //输出详情
//第一重方式
for (i in list) {
print(i)
}
println()
//第二种方式
list.forEach {
print(it)
}
println()
//第三种遍历方式,前面代变下标,后面是元素
list.forEachIndexed { index, item ->
print("下标是:$index,元素是:$item ")
}
}
5、Kotlin 语法过滤元素_
//TODO Kotlin结构语法过滤元素 _
fun main() {
val list = listOf("李元霸", "李小龙", "李连杰")
val (value1, value2, value3) = list
println("value1:$value1,value2:$value2,value3:$value3") //输出详情
var (v1, v2, v3) = list
println("v1:$v1,v2:$v2,v3:$v3") //输出详情
//代表不接受第一个元素,虚拟机不会进行赋值
val (_, n2, n3) = list
}
6、Kotln Set集合使用
//TODO Kotlin set集合
fun main() {
//set集合不会出现重复元素
val set: Set<String> = setOf("lisi", "wangwu", "zhaoliu", "zhaoliu")
println(set)
//set[0], set不能通过下标去取
println(set.elementAt(0))//[0]
println(set.elementAt(1))//[1]
println(set.elementAt(2))//[2]
println(set.elementAt(3))//[3] ,会崩溃,越界
//下面两种方式不会出现越界报错,与空并操作符一起使用
//使用set和list集合尽量使用此方式,防止越界崩溃
println(set.elementAtOrElse(0) { "越界" })
println(set.elementAtOrNull(0) ?: "越界了")
}
7、Kotlin 可变set集合 mutableSetOf
//TODO Kotlin set 可变集合
fun main() {
//set集合不会出现重复元素
val set: MutableSet<String> = mutableSetOf("lisi", "wangwu", "zhaoliu", "zhaoliu")
set += "张三"
set += "李四"
println(set)
set -= "赵六"
println(set)
set.add("aaa")
println(set)
set.remove("bbb")
println(set)
}
8、Kotlin 集合转换与快捷函数
//TODO Kotlin 集合转换与快捷函数
fun main() {
val list: MutableList<String> = mutableListOf("zhangsan", "zhangsan", "lisi", "wangwu") //list可以重复
//list转set,并且去重
val set = list.toSet()
//还是list,也可以去重
val list2 = list.toSet().toList()
//快捷方式去重,转可变set后再转为list
println(list.distinct())
}
9、Kotlin 中数组类型
import java.io.File
//TODO Kotlin 数组
fun main() {
//1. initArrayOf,常规操作的越界崩溃,int 类型转数组
val initArray = intArrayOf(1, 2, 3, 4, 5)
println(initArray[0])
println(initArray[6])//会抛越界异常
//不会崩溃的方式,只能传int -1 代表越界
println(initArray.elementAtOrElse(6) { -1 })
println(initArray.elementAtOrNull(6) ?: "越界")//加空并操作符一起用
//对象数组 Array<File>对象类型
val array = arrayOf(File("AAA"), File("BBB"))
//集合可以转数组
val charArray = listOf('A', 'B', 'C').toCharArray()
}
10、Kotlin Map创建,读取Map值
//TODO Kotlin Map 定义
fun main() {
val mMap: Map<String, Double> = mapOf("zhangsan" to (532.2), "lisi" to 453.1)
val map2 = mapOf(
Pair("zhangsan", 451.2), Pair("lisi", 545.3)
)
val map = mapOf("zhangsan" to 123,"lisi" to 456)
println(map["zhangsan"])
println(map["lisi"])
println(map["lisi222"])//找不到,返回null,不会崩溃
//方式二 得不到给我一个默认值 get与[]等价
println(map.getOrDefault("zhangwu",-1))
//方式三
println(map.getOrElse("dsad"){-14})
}
11、Kotlin中的map 遍历
fun main() {
val map = mapOf("zhangsan" to 123, "lisi" to 456)
//1、foreach
map.forEach {
//it == 每个元素 K和V
// it类型 Map.Entry<String,Int>
println("K:${it.key} V:${it.value}")
}
println()
map.forEach { key, value ->
println("K:$key,V:$value")
}
println()
map.forEach { (k, v) ->
println("K:$k,V:$v")
}
//for循环
for (i in map) {
// i类似于it
println("K:${i.key},V:${i.value}")
}
}
12、Kotlin 可变map集合
//TODO Kotlin 可变Map
fun main() {
val map = mutableMapOf("zhangsan" to 123, "lisi" to 456)
map += "aaa" to (111)
map += "bbb" to 236
map -= "zhangsan"
map["ccc"] = 888
map.put("DDD", 999)
//getOrPut 有的情况
//如果整个map没有fff的Key,就帮你先添加到map中去
val r = map.getOrPut("fff") { 555 }
println(r)
println(map["FFF"])//已经添加了,可以获取到
//getOrPut 有
//能获取到数据,后面得666备用值失效
val e = map.getOrPut("aaa") { 666 }
println(e)
}