当前位置:网站首页>kotlin 数组、集合和 Map 的使用
kotlin 数组、集合和 Map 的使用
2022-06-24 12:50:00 【华为云】
@[TOC](kotlin 数组、集合和 Map 的使用)
前言
使用纯代码 加 注释的方式,可以更快的理解源码
如果你喜欢,请点个赞,后期会不断的深入讲解
1、List 创建与元素获取
val list = listOf("张三","大漂亮","王美丽","王五")// 正常取值方式: 索引, 内部是运算符重载 [] = get println(list[0]) println(list[1]) println(list[2]) println(list[3]) // println(list[4]) // 下标越界崩溃 Index 4 out of bounds for length 4// kotlin 中,可以使用 getOrElse 和 getOrNull ,解决空指针异常,下标越界的崩溃异常// getOrElse 在取值越界的时候,会直接返回{"啊呀,你越界了,我出来了哦"} 括号里面定义的参数 println(list.getOrElse(0){"你没有越界,我不会出来的"}) println(list.getOrElse(4){"啊呀,你越界了,我出来了哦"})// getOrNull 在下标越界的时候,会返回一个null ,我们可以 + 空合并操作符, 使其返回一个字符 println(list.getOrNull(0)) println(list.getOrNull(4)) println(list.getOrNull(4) ?: "没错,就是这里越界了,我使用空合并操作符出来了")2、可变List 集合
// 不可变集合 val list1 = listOf("张三","大漂亮","王美丽","王五") println(list1)// 可变集合 val list2 = mutableListOf("张三","大漂亮","王美丽","王五") list2.add("tiger") list2.remove("王五") println(list2)// 不可变集合 to 可变集合 val list3 = list1.toMutableList() list3.remove("大漂亮") list3.add("tiger") println(list3)// 可变集合 to 不可变集合 val list4 = list2.toList()// list4.add 没有添加和删除方法 println(list4)3、mutator 函数
val list2 = mutableListOf("张三","大漂亮","王美丽","王五")// mutator 的特性 += -= 其实背后就是 运算符重载而已 list2 += "tiger" list2 += "tt" list2 -= "tt" println(list2)// removeIf // list2.removeIf{true} // 如果返回的值是 true ,list2 就会自动遍历整个可变集合,一个一个的移除所有的数据 list2.removeIf{it.contains("t")} // 过滤集合中的所有元素,只要包含 t 的数据元素,就会被移除 println(list2)4、List 集合遍历 三种常用方式
val list2 = mutableListOf("张三", "大漂亮", "王美丽", "王五")// 1、 for 循环遍历 for (i in list2) { print("元素是: $i ") } println()// 2、forEach 遍历 list2.forEach { print("元素是: $it") } println()// 3、forEachIndexed 获取下标和元素的遍历 list2.forEachIndexed { index, item -> print("下标是:$index, 元素是:$item") }5、结构语法过滤
val list2 = mutableListOf("张三", "大漂亮", "王美丽", "王五")// 集合配合结构语法 val (v1, v2, v3) = list2 println(v1) println(v2) println(v3)// val 是只读的数据遍历,可以使用var 修改结构出来的数据 var (v11, v22, v33) = list2 v22 = "tiger" println(v1)// 也可以使用 _ 符号,来屏蔽你不需要的接收值,算是数据优化,可以优化内存 val (_, v222, v333) = list2 println(v222) println(v333)6、set 集合
set 集合,元素不能重复
// set 集合,元素不能重复 val set = setOf("张三", "大漂亮", "王美丽", "王五", "大漂亮")// set 集合普通的取值方式// set[0] 在set 中,没有[] 这样的功能, 取set 的集合值 set.elementAt(0)// set.elementAt(5) 这里会越界崩溃// set 集合 和list 集合一样,给我们提供了一种有效的取值方式,可以避免下标越界等情况的出现 set.elementAtOrElse(0){"不越界,我就不会出来"} set.elementAtOrElse(6){"越界了哦,我出来啦"} set.elementAtOrNull(0) set.elementAtOrNull(6) ?: "越界啦,你返回了null,空合并操作符,让我出来和你见面"7、可变的set 集合
// list 中,有可变的集合,set 当然也会有啦。包括集合转变什么的,参照list 就可以 val set = mutableSetOf("张三", "大漂亮", "王美丽", "王五", "大漂亮") set.add("tiger") set.remove("王五") set.removeIf{ it.contains("王") } println(set)8、集合转换与快捷函数
val list = mutableListOf("张三", "大漂亮", "王美丽", "王五", "大漂亮")// list 转set 去重 println(list.toSet())// list 转set 去重,再转回list println(list.toSet().toList())// 使用快捷去重函数 distinct println(list.distinct()) // 其实就是内部封装了一下,先把List 转换成 可变长度的set 再转换成list ,和上面的操作是一样的 9、数组类型
在kotlin 语言中,各种数组类型,虽然使用的是引用类型,背后可以编译成Java 基本类型
IntArray intArrayOfDoubleArray doubleArrayOfLongArray longArrayOfShortArray shortArrayOfByteArray byteArrayOfFloatArray floatArrayOfBooleanArray booleanArrayOfArray<对象类型> arrayOf 对象数组 val intArray = intArrayOf(1, 23, 32, 5, 2, 3)// 其实数组和之前说的集合都是一样的,简单的,不再赘述 intArray[3]// intArray[7] 下标越界, intArray.elementAtOrElse(3) { -1 } intArray.elementAtOrNull(66) ?: -1// list 集合转数组 val set = intArray.toSet() println(set)// Array<对象数组> val array = arrayOf(File("文件路径"), File("文件路径"), File("文件路径")) println(array)10、Map 的创建
// 在kotlin 中,下面两种创建map 的方式,其实是等价的 val map = mapOf("tiger" to "111", "ss" to "333") val map1 = mapOf(Pair("tiger", "111"), Pair("tiger2", "")) 11、读取Map 的值
val map = mapOf("tiger" to 122, "tiger2" to 333) // 方法一 找不到会返回一个null println(map["tiger"]) println(map["tiger333"]) // 返回null// 方法二 和数组集合是一样的 println(map.getOrElse("tiger") {-1}) println(map.getOrElse("tiger222") {-1}) //找不到会返回-1 // 方法三 getOrDefault println(map.getOrDefault("tiger", -1)) println(map.getOrDefault("tiger4444", -1)) //找不到会返回-1// 方法四 getValue println(map.getValue("tiger")) println(map.getValue("tiger666")) //找不到会直接崩溃12、Map 的遍历
val map = mapOf(Pair("tiger", 12), Pair("tiger2", 34), Pair("tiger3", 44), Pair("tiger4", 66))// 第一种 for (i in map){ println(i) println(i.key) println(i.value) }// 第二种 map.forEach{// 这个it 包含了 key value println(it) println(it.key) println(it.value) }13、可变的Map 集合
val map = mutableMapOf(Pair("tiger", 12), Pair("tiger2", 34), Pair("tiger3", 44), Pair("tiger4", 66))// 其实就和集合数组一样的操作// 可变集合的操作 -= += [] put map += "tiger222" to 322 map -= "tiger222" map["dddd"] = 3000 map.put("ssss", 333) println(map)// getOrPut 没有传入的 tiger555 key的话,他会把这个数据,插入进整个集合 println(map.getOrPut("tiger555") { 7777 }) // getOrPut 当需要获取的key,在集合中找到了,就直接获取集合中的对应的value 值 println(map.getOrPut("tiger555") { 999 })总结
🤩
️
边栏推荐
- Opengauss kernel: simple query execution
- "Interesting" is the competitiveness of the new era
- Integrated API interface code of domestic express companies for intra city distribution and ordering - Express 100
- Configuration (enable_*) parameter related to execution plan in PG
- YOLOv6:又快又准的目标检测框架开源啦
- 强化学习之父Richard Sutton论文:追寻智能决策者的通用模型
- Implement Domain Driven Design - use ABP framework - update operational entities
- Developer survey: rust/postgresql is the most popular, and PHP salary is low
- 手把手教你用AirtestIDE无线连接手机!
- Use terminal to activate CONDA service in pypharm (the ultimate method is definitely OK)
猜你喜欢

openGauss内核:简单查询的执行

AGCO AI frontier promotion (6.24)

脚本之美│VBS 入门交互实战

#云原生征文#Ingress案例实战

物联网?快来看 Arduino 上云啦

nifi从入门到实战(保姆级教程)——环境篇

Use terminal to activate CONDA service in pypharm (the ultimate method is definitely OK)

使用 Abp.Zero 搭建第三方登录模块(一):原理篇
![[data mining] final review (sample questions + a few knowledge points)](/img/90/a7b1cc2063784fb53bb89b29ede5de.png)
[data mining] final review (sample questions + a few knowledge points)

如何避免严重网络安全事故的发生?
随机推荐
Sinomeni vine was selected as the "typical solution for digital technology integration and innovative application in 2021" of the network security center of the Ministry of industry and information te
Boss direct employment IPO: both the end and the beginning
Troubleshooting the kubernetes problem: deleting the rancher's namespace by mistake causes the node to be emptied
On the difference between process and thread
8 lines of code to teach you how to build an intelligent robot platform
Summary of the process of restoring damaged data in MySQL database
8 - Format integers and floating point numbers
问个sql view的问题
爱可可AI前沿推介(6.24)
The agile way? Is agile development really out of date?
1. Snake game design
Vipshop's "special sale" business is no longer easy to do?
CVPR 2022 | 美团技术团队精选论文解读
nifi从入门到实战(保姆级教程)——环境篇
一文理解OpenStack网络
Opengauss kernel: simple query execution
使用 Abp.Zero 搭建第三方登录模块(一):原理篇
39 - read XML node and attribute values
【AI玩家养成记】用AI识别邻居家旺财是什么品种
C语言中常量的定义和使用