目录
一、List数组
1、getOrElse、getOrNull学习
kotlin数组获取数据可以使用[]操作符,因为kotlin使用了操作符功能。获取元素尽量使用getOrElse或者getOrNull避免出现java中经常出现的数组越界问题。
fun main() {
listTest()
}
fun listTest() {
var l : List<String> = listOf<String>("ZhangSan" , "LiSi" , "WangWu" , "ZhaoLiu")
println(l[0])
println(l[1])
println(l[2])
println(l[3])
//println(l[4]) 越界崩溃
println(l.getOrElse(4) {"$it 你越界了哈!"})
println()
println(l.getOrNull(5))
}
/**
打印值
ZhangSan
LiSi
WangWu
ZhaoLiu
4 你越界了哈!
null
* */
1、getOrElse第一个参数,要取出的下标值,第二个参数是一个lambda函数,返回值为泛型,就是list的数据类型。当输入的下标越界的时候,会返回lambda的返回值,并不会崩溃。
2、getOrNull接收一个参数为要取出的下标,当发生数组越界的时候返回null,并不会崩溃。
二、MutableList可变数组
MutableList为可变集合,可以使用add、remove等操作 ,实现了运算符重载可以使用 += -=操作。
removeIf,可以批量删除指定类型的所有元素,相当于对集合进行遍历后判断每个元素是否符合lambda表达式给定的判定条件,然后对指定元素进行删除操作。
MutableList和List可以进行相互转换。l.toList() l.toMutableList()
fun main() {
val l : MutableList<String> = mutableListOf<String>("ZhangSan" , "LiSi" , "WangWu" , "ZhaoLiu")
l.removeAt(1)
l.add("零零散散")
println("集合1 : $l")
println()
//运算符重载
l += "张三"
l += "王五"
l += "张老六"
l -= "ZhangSan"
println("集合2 : $l")
//测试getOrNull,数组越界
println(l.getOrNull(600))
//删除,条件是lambda表达式为true的元素,it为list中的每一个元素
l.removeIf {
it.contains("张")
}
println("集合3 : $l")
l += "张三"
l += "王五"
l += "张老六"
//遍历相关
for (v in l) {
print("元素 $ v , ")
}
println()
l.forEach{
print("元素:$it , ")
}
println()
//forEachIndexed接收两个参数
l.forEachIndexed{index , item ->
print("元素:{$index} 值为 $item , ")
}
l.toList() ;
l.toMutableList() ;
println()
}
/**
* 输出
* 集合1 : [ZhangSan, WangWu, ZhaoLiu, 零零散散]
集合2 : [WangWu, ZhaoLiu, 零零散散, 张三, 王五, 张老六]
null
集合3 : [WangWu, ZhaoLiu, 零零散散, 王五]
元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v , 元素 $ v ,
元素:WangWu , 元素:ZhaoLiu , 元素:零零散散 , 元素:王五 , 元素:张三 , 元素:王五 , 元素:张老六 ,
元素:{0} 值为 WangWu , 元素:{1} 值为 ZhaoLiu , 元素:{2} 值为 零零散散 , 元素:{3} 值为 王五 , 元素:{4} 值为 张三 , 元素:{5} 值为 王五 , 元素:{6} 值为 张老六 ,
* */
三、List的for遍历
很简单,主要使用until、..、downTo、step几个关键字,直接看代码即可
//until 左关右开
for (i in 0 until 50){
print("$i ")//输出 0 - 49
}
println()
//.. 左关右关
for (i in 0..50){
print("$i ")//输出 0 - 50
}
val ll = 0..50
println(ll)
//downTo自降方式,左闭右闭
for (i in 50 downTo 0) {
print("$i ")//输出 0 - 50
}
println()
//step设置步长
for (i in 50 downTo 0 step 2) {
print("$i ")//输出 0 - 50
}
println()
//遍历列表,直接使用until避免最后一个元素越界问题
println("使用for加下标遍列表:")
for (i in 0 until l.size) {
print("${l[i]} , ")
}
println()
//逆向遍历列表
for (i in l.size-1 downTo 0) {
print("${l[i]} , ")
}