Kotlin入门学习记录
2023/12/01
集合
在KT中和Java一样集合分为两种List
、Set
、Map
,和Java不同的是KT还分为可变集合和不可变集合
List
不可变List
,一旦声明 集合中的数据将无法进行修改,可以使用下标进行访问,代码实现如下
val listOf = listOf("LY_C", "CRY", "TEST")
println(listOf[1]) //CRY
println(listOf.getOrElse(3){"Unknow"}) //Unknow
println(listOf.getOrNull(3)?:"Unknow") //Unknow
List
中常见的使用函数:
函数名 | 作用 |
---|---|
getOrElse | 获取指定下标的值失败则执行后方的lambda |
getOrNull | 获取指定下标的值失败则返回null |
可变List
为mutableListOf
,和Java中的ArrayList
很像,集合中的数据可以进行修改,代码实现如下
var mutableListOf = mutableListOf("LY_C")
mutableListOf.add("CRY")
mutableListOf.add("TEST")
println(mutableListOf) //[LY_C, CRY, TEST]
mutableListOf.remove("TEST")
println(mutableListOf) //[LY_C, CRY]
Java实现ArrayList
,代码如下
ArrayList list = new ArrayList(Collections.singleton("LY_C"));
list.add("CRY");
list.add("TEST");
System.out.println(list); //[LY_C, CRY, TEST]
list.remove("TEST");
System.out.println(list); //[LY_C, CRY]
使用toList
和toMutableList
实现mutableListOf
与list
互相转换,代码实现如下
listOf("LY_C", "CRY", "TEST").toMutableList()
mutableListOf("LY_C", "CRY", "TEST").toList()
mutator函数
将能够修改可变列表的函数称为mutator
函数,以下为常见的mutator
函数
val mutableListOf = mutableListOf("LY_C","TEST")
mutableListOf += "CRY"
mutableListOf -= "CRY"
mutableListOf.removeIf{ it.contains("TEST")}
println(mutableListOf) //[LY_C]
List遍历
有三种遍历方式,for in
、 forEach
、forEachIndexed
,其中forEachIndexed
在遍历时要获取索引,前两种Java中也有,与Java中不同的是KT传入的是lambda
,代码实现如下
val mutableListOf = mutableListOf("LY_C","TEST")
mutableListOf += "CRY"
for (s in mutableListOf) {
print(s) //LY_CTESTCRY
}
println()
mutableListOf.forEach {
print(it) //LY_CTESTCRY
}
println()
mutableListOf.forEachIndexed{ index: Int, s: String ->
print(" ${index}:${s} ") // 0:LY_C 1:TEST 2:CRY
}
Java中的for in
、 forEach
遍历如下:
ArrayList list = new ArrayList();
list.add("LY_C");
list.add("CRY");
list.add("TEST");
list.forEach(System.out::print);//LY_CCRYTEST
System.out.println();
for (Object o : list) {
System.out.print(o);//LY_CCRYTEST
}
解构
一次性给多个变量赋值就是解构,代码实现如下
val mutableListOf = mutableListOf("LY_C","TEST","CRY")
var(name1,name2,mame3) = mutableListOf
使用_
过滤不使用的元素,JVM不会将_
位置的元素提取出进行赋值,代码实现如下
val mutableListOf = mutableListOf("LY_C","TEST","CRY")
var(name1,_,mame3) = mutableListOf
Set
和List
一样也分为可变setOf
和不可变mutableSetOf
,代码实现如下
注意
Set
集合不能包含相同元素
Set
集合不能使用下标进行访问元素
val of = setOf("LY_C", "CRY", "TEST")
println(of.elementAt(1)) //CRY
var mutableSetOf = mutableSetOf("LY_C")
mutableSetOf.add("CRY")
mutableSetOf.add("TEST")
println(mutableSetOf)//[LY_C, CRY, TEST]
distinct快捷函数
List
和Set
互相转换,一般用于去除重复元素,使用distinct
快捷函数也可以实现相同结果,代码实现如下
val listOf = listOf("LY_C", "CRY", "TEST", "LY_C", "CRY", "TEST")
.toSet()
.toList()
println(listOf)//[LY_C, CRY, TEST]
//与上方代码效果一致
println(listOf("LY_C", "CRY", "TEST", "LY_C", "CRY", "TEST").distinct())//[LY_C, CRY, TEST]
Map
Map
就是键值对,to
前为key
,to
后为value
,也分为可变mapOf
和不可变mutableMapOf
,代码实现如下
val map = mapOf("1" to "LY_C", "2" to "CRY", "3" to "TEST")
println(map["1"])
println(map)
val mapOf = mutableMapOf("1" to "LY_C", "3" to "TEST")
mapOf.put( "2" , "CRY")
mapOf.remove("3")
println(mapOf)
注意
上边的实现看起来是使用to
关键字,其实是to
函数将左右的值转换为一对Pair
,代码实现如下
val mapOf1 = mapOf(Pair("1", "LY_C"), Pair("2", "CRY"), Pair("3", "TEST"))
Map
中的特殊函数getOrPut
,如果没有指定的key
会进行put
操作,代码实现如下
val mapOf = mutableMapOf("1" to "LY_C", "3" to "TEST")
mapOf.getOrPut("2"){"CRY"}
println(mapOf)//{1=LY_C, 2=CRY, 3=TEST}
数组
随便写个例子
var intArrayOf = intArrayOf(1, 2, 3)
intArrayOf += 4
intArrayOf.forEach { print(it) }//1234