Kotlin基本语法(四)-集合
1、List
获取元素的两种方式:
普通元素获取:list[0]
防崩溃方式获取:list.getOrElse()list.getOrNull()
fun main() {val list = listOf("jack",2,"jarry","")//普通方式println(list[0])println(list)println(list[3])//防崩溃方式println(list.getOrElse(1,{"我越界了"}))println(list.getOrElse(100,{"我越界了"}))//加上空合并操作符println(list.getOrNull(1) ?: "我越界了")println(list.getOrNull(100) ?: "我越界了")}
2、 list 可变集合和不可变集合的转换
可变集合:可以对集合中的元素进行添加或删除
不可变集合:不可以对集合中的元素进行修改或删除
不可变-----可变:list.toMutableList()
可变-----不可变:list2.toList()
集合类型的转换必须要用一个新的变量接收,要不则不能实现类型的转换
fun main() {//不可变集合val list = listOf("jack",2,"jarry","")println(list)//可变集合val list2 = mutableListOf("jack","1","jarry","tom")list2.add("maria")list2.remove("1")println(list2)//可变集合变成不可变集合list2.toList() //单单用这个方法不可以变成不可变集合list2.add("jlfdjaksf")val list3 = list2.toList()//得用一个新的变量来接收list2的改变才可以println(list2)//不可变集合变成可变集合val list4 = list.toMutableList()list4.add("jjjjj")list4.remove(2);println(list4)
}
3、mutator函数的理解
+=
代表.add()
-=
代表.remove()
removeIf()
:按条件筛选删除
fun main() {//可以用+= 代表.add()//用-= 代表.remove()val list = mutableListOf(123, 234, 345, 4556, 567, 789)list += 110list -= 123println(list)//removeIf() //按条件筛选删除
// list.removeIf { true }// 如果是true就删除集合中所有元素list.removeIf { it <300 } //这里的it是list中的每个元素println(list)
}
4、最常用的集合遍历方式
1、for循环遍历
2、forEach方式遍历
3、forEachIndexed()
fun main() {val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)//这只是输出不是遍历println(list)//for循环遍历for (i in list){print("元素:$i ")}println()//forEach方式遍历list.forEach{print("元素:$it ")}println()//list.forEachIndexed()list.forEachIndexed { index, i ->print("元素是:$index,下标是:$i ")}
}
5、语法过滤元素 “_”
用_下划线内部可以不接受赋值,可以节约一点性能
fun main() {val list = listOf("李小龙", "叶问", "霍元甲")val(value1,value2,value3) = listprintln("value1:$value1 value2:$value2 value3:$value3 ")var (v1,v2,v3) = listv1 = "陈真"println("v1:$v1 v2:$v2 v3:$v3")//用_下划线内部可以不接受赋值,可以节约一点性能val(_,vl3) = list;println(" vl3:$vl3")}
6、set集合的创建和元素获取
集合的创建:
setOf("jack", "lusi", "lisi", "wangwu")
元素的获取:setList.elementAt(0)
无报错获取:println(setList.elementAtOrElse(100){"越界了"} )
println(setList.elementAtOrNull(100) ?: "越界了啊"
)
空合并操作符:?:
,,返货null值的函数一般和空合并操作符一起使用比较好
fun main() {val setList = setOf("jack", "lusi", "lisi", "wangwu")println(setList)//setList.elementAt(0) 和 list[0] 一模一样println("第几个元素:${setList.elementAt(0)}")println("第几个元素:${setList.elementAt(2)}")println()//使用set 和list 集合时尽量都使用这种方式,防止下标越界println(setList.elementAtOrElse(0){"越界了"} )println(setList.elementAtOrElse(100){"越界了"} )println(setList.elementAtOrNull(0) ?: "越界了")println(setList.elementAtOrNull(100) ?: "越界了啊")
}
7、快捷函数于集合转换
快捷函数去重;list转set也可以去重
println(list.distinct())
// 内部做了 ,先变成可变的set集合,
println(list.toMutableSet().toSet())
//
fun main() {val list = mutableListOf("Tom", "Jack", "marry", "marry", "lucy")println(list)//list转set去重val toSet = list.toSet()println(toSet)//list转set再转set也能去重val toList = list.toSet().toList()println(toList)//快捷函数去重println(list.distinct())// 内部做了 ,先变成可变的set集合,println(list.toMutableSet().toSet())// 和上面代码一样}
8、数组类型
kotlin语言中的各种数组类型是引用类型,背后可以变异成java的基本数据类型
IntArray ----------> inArrayOf
DoubleArray ----------> DoubleArrayOf
LongArray ----------> LongArrayOf
ShortArray ----------> ShortArrayOf
ByteArray ----------> ByteArrayOf
FloatArray ----------> FloatArrayOf
BooleanArray ----------> BooleanArrayOf
Array ----------> ArrayOf -------------------------->对象数组
和集合一样,数组也有防止空指针,数组下标越界的函数判断
1、intArrayOf ---------》常规操作会出现数组越界
2、elementAtOrElse ------- elementAtOrNull ----------》防止出现数组越界和空指针
9、Map 集合
(1)创建:
mapOf("a" to 1, "b" to 2, "c" to 3, "d" to 4)
mapOf(Pair("a",1), Pair("b",2),Pair("c",3))
val map1 = mapOf("a" to 1, "b" to 2, "c" to 3, "d" to 4)val map2 = mapOf(Pair("a",1), Pair("b",2),Pair("c",3))println(map1)println(map2)
(2)取值:
读取map的值的四种方式
1、map[0] 和 get(“key”) 两种范式完全等价
2、getOrDefault
3、getOrElse
4、getValue 会出现崩溃
fun main() {//读取map的值的四种方式
// 1、map[0] 和 get("key") 两种范式完全等价
// 2、getOrDefault
// 3、getOrElse
// 4、getValue 会出现崩溃/*** 第一种:*/println(map1["a"])println(map1["e"])
// 等价于:println(map1.get("a"))println(map1.get("e"))/*** 第二种*/println(map1.getOrDefault("a",-1))println(map1.getOrDefault("e",-1))/*** 第三种*/println(map1.getOrElse("a") {-1})println(map1.getOrElse("e") {-1})/*** 第四种*/println(map1.getValue("a"))println(map1.getValue("e"))}
四种遍历方式:
// 四种遍历方式://第一种:map.forEach {println("k:${it.key} v:${it.value}")}println();println();println()//第二种:map.forEach{ key:String ,value : Int ->println("k:$key v:${value}")}println();println();println()//第三种:map.forEach { (k, v) ->println("k:$k v:$v")}println();println();println()//第四种 for 循环for (item in map) {println("k:${item.key} v:${item.value}")}}
可变map集合:
MutableMap
1、添加:+=
.put
[]
2、删除:-=
3、查看:getOrPut(没有的话就默认添加)
getOrElse(防空)
getOrDefault(防空)
fun main() {val map = mutableMapOf<String, Int>(Pair("a", 123), "b" to 234, Pair("c", 345))println(map)//可变操作//添加 “+=”map+= Pair("d",456)map+= "c" to 789map+= "d" to (890)map.put("e",23423)//put 和 [] 是等价的map["f"] = 123123
// 删除“-=”map-= "a"// 取值 防止空指针,下标越界//getOrPut getOrElse getOrDefaultmap.getOrDefault("a",444)println(map.getOrPut("b"){555})println(map.getOrPut("c"){999})println(map.getOrElse("c"){-1})println(map)
}
10、防范竟态条件
**防范竟态条件:**当你调用成员,这个成员可能为null,可能为空值,就必须采用防范静态条件,这个是KT编程的规范化
fun main() {var info : String ? = null//防范竟态条件 : 当你调用成员,这个成员可能为null,可能为空值,就必须采用防范静态条件,这个是KT编程的规范化fun getShowInfo() : String {return info?.let {if (it.isBlank()) {"请检查代码,可能为空"}else{"最终的结果是:$it"}} ?: "info 是null 请检查代码"}println(getShowInfo())
}
Kotlin基本语法(四)-集合相关推荐
- Kotlin基本语法和使用
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性. Kotlin是使用Java开发者的思维被创 ...
- 代码实现sql编译器_【数据蒋堂】第 19 期:从 SQL 语法看集合化
[数据蒋堂]第 19 期:从 SQL 语法看集合化 SQL 作为最常用的结构化数据计算语言,虽然在做一些细致处理时不太方便,但用于描述基本运算还是比 Java 等高级语言要简单许多.这是因为 SQL ...
- kotlin常用语法扫盲及开发注意点,勿错失(持续更新)
kotlin常用语法扫盲及开发注意点,勿错失(持续更新) 文章目录 kotlin常用语法扫盲及开发注意点,勿错失(持续更新) 单句表达式 可以直接 用 = 省略 大括号 ::双冒号作用 map,lis ...
- Kotlin 特性 语法糖 优势 扩展 高阶 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Kotlin基础语法(上)
文章目录 Kotlin基础语法(下) Kotlin基础语法(上) 输出Hello world!!! 变量与输出 kotlin常见数据类型 变量的取值范围 kotlin函数 kotlin布尔类型 kot ...
- Kotlin实战指南四:区间
转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/87866868 本文出自[赵彦军的博客] Kotlin初体验四:区间 区间 实用函 ...
- Pocket英语语法---四、should的同义词是谁
Pocket英语语法---四.should的同义词是谁 一.总结 一句话总结:should表示劝告,建议,命令,其同义词是ought to,should强调主观看法,ought to强调客观要求.在疑 ...
- 快速学习Kotlin(七)集合与操作符
集合是我们在代码编写时常用的操作数据的方式之一,具有非常重要的作用. 在kotlin中也有集合的概念,kotlin中的集合一般有三种:List.Map以及Set三种.而这三种集合每种又可以分为可变集合 ...
- java文件的后缀.kt_移动端Kotlin 基础语法.kt 为后缀
Kotlin 基础语法 Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.main import java.util.* fun t ...
- Kotlin(三) 语法糖
在上篇函数中,我们知道了如何定义函数,那么现在定义个函数,取两个数中比较大的数: fun getMaxNum(a : Int,b : Int) : Int { return max(a ...
最新文章
- 高斯混合模型(GaussianMixture Model, GMM)聚类、可视化最优协方差形式、通过TSNE进行结果可视化分析、抽取核心特征因子
- python语言表白源码-表白 - python代码库 - 云代码
- 【命令init3/5】centos7切换图像界面和dos界面
- js获取window窗口高度(页面滚动条可滚动高度) - 代码篇
- L2-007. 家庭房产
- ssis 列转换_SSIS中的术语提取转换
- 数组的合并和升序排列_每日“力扣”系列10 下一个排列
- 数据链路层点到点通讯和PPP协议
- 目标检测YOLO V5 C++版本
- 【经验之谈】掌握这13个PyTorch Trick,让你做实验行云流水~
- hadoop日常维护之问题解决01
- 深入探索C++对象模型(2)
- PMP搞心态,解读最新『三大领域』考试内容:(附上第7版教材)
- 多元统计分析假设检验
- Fiddler https最新抓包方法(Android 9.0)
- LiveVideoStackCon2021 北京站专访:从上云到创新,视频云的新技术、新场景
- Spring事务(Transaction)
- 同义词转换不再有效_中考英语丨初中英语句型转换大全
- 【附源码】计算机毕业设计SSM我的大学电子相册
- 高斯消去法的python实现