当前位置:网站首页>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 })总结
🤩
️
边栏推荐
- Coinbase will launch the first encryption derivative for individual investors
- Preparation and operation & Maintenance Guide for 'high concurrency & high performance & high availability service program'
- Cohere、OpenAI、AI21联合发布部署模型的最佳实践准则
- Implement Domain Driven Design - use ABP framework - create entities
- Vipshop's "special sale" business is no longer easy to do?
- IIS WCF 808 port service access exception
- Yolov6: the fast and accurate target detection framework is open source
- 快速了解常用的消息摘要算法,再也不用担心面试官的刨根问底
- 我真傻,招了一堆只会“谷歌”的程序员!
- Perhaps the greatest romance of programmers is to commemorate their dead mother with a software
猜你喜欢

Creation and use of unified links in Huawei applinking

使用 Abp.Zero 搭建第三方登录模块(一):原理篇

Beauty of script │ VBS introduction interactive practice

敏捷之道 | 敏捷开发真的过时了么?

hands-on-data-analysis 第三单元 模型搭建和评估

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

1. Snake game design

1、贪吃蛇游戏设计

一文讲透研发效能!您关心的问题都在

Nifi from introduction to practice (nanny level tutorial) - environment
随机推荐
Why does the kubernetes environment require that bridge NF call iptables be enabled?
The agile way? Is agile development really out of date?
Parti,谷歌的自回归文生图模型
Gateway processing flow of zuul source code analysis
Nifi from introduction to practice (nanny level tutorial) - environment
黄金年代入场券之《Web3.0安全手册》
面试官:MySQL 数据库查询慢,除了索引问题还可能是什么原因?
Implement Domain Driven Design - use ABP framework - update operational entities
脚本之美│VBS 入门交互实战
CVPR 2022 - Interpretation of selected papers of meituan technical team
Express 100 Express query interface (API) interface specification document - detailed version
Sqlserver 2000 has long-lasting vitality
Getting started with the go Cobra command line tool
Cloud native essay solicitation progress case practice
Cmput 379 explanation
Sphere, openai and ai21 jointly publish the best practice guidelines for deployment models
Kubernetes cluster deployment
Leetcode 1218. Longest definite difference subsequence
"I, an idiot, have recruited a bunch of programmers who can only" Google "
我開導一個朋友的一些話以及我個人對《六祖壇經》的一點感悟