Kotlin学习笔记基础篇四之集合的使用

396 阅读3分钟

1、Kotlin List集合

fun main() {

    val list = listOf("张三", "lisi", "wangwu")

    //普通取值方式 索引,有数组下标越界的风险

    println(list[0])
    println(list[1])
    println(list[2])

    //防止崩溃取值方式
    println(list.getOrElse(1) { "越界" })
    println(list.getOrElse(3) { "越界" })

    println(list.getOrNull(3))

    //一般 getOrNull +空操作符
    println(list.getOrNull(222) ?: "你越界了")
}

2、Kotlin List可变集合与不可变集合转化

//TODO 可变list  MutableList
fun main() {

    //可变集合
    val list: MutableList<String> = mutableListOf("张三", "lisi", "wangwu")
    list.add("zhaoliu")
    list.remove("张三")

    //不可变集合to可变集合,不能add,remove
    val list2 = listOf("zhangsan", "lisi", "wangwu")


    val list3 = list2.toMutableList()
    list3.add("aaa")
    list3.remove("0")
    println(list3)

    //可变集合转为不可变集合
    val list4 = mutableListOf('A', 'b', 'C')

    val list5 = list4.toList()
}

3、Kotlin List removeif

//TODO removeIf
fun main() {

    val list = mutableListOf("张三","lisi","wangwu","zhaoliu")
    list+="李四" //背后就是运算符重载
    list+="王五"
    list-="lisi"
    println(list)

    //removeif
//    list.removeIf{true} //true 自动遍历可变几个,进行一个一个元素删除
    list.removeIf{it.contains("li")}//过滤所有元素,只要有li得元素删除

    println(list)
}

4、Kotlin List遍历

//TODO Kotlin集合得遍历
fun main() {

    val list = listOf(1, 2, 3, 4, 5, 6)

    println(list) //输出详情

    //第一重方式
    for (i in list) {
        print(i)
    }

    println()
    //第二种方式

    list.forEach {
        print(it)
    }

    println()

    //第三种遍历方式,前面代变下标,后面是元素
    list.forEachIndexed { index, item ->
        print("下标是:$index,元素是:$item  ")

    }

}

5、Kotlin 语法过滤元素_

//TODO Kotlin结构语法过滤元素 _
fun main() {

    val list = listOf("李元霸", "李小龙", "李连杰")

    val (value1, value2, value3) = list

    println("value1:$value1,value2:$value2,value3:$value3") //输出详情

    var (v1, v2, v3) = list
    println("v1:$v1,v2:$v2,v3:$v3") //输出详情

    //代表不接受第一个元素,虚拟机不会进行赋值
    val (_, n2, n3) = list
}

6、Kotln Set集合使用

//TODO Kotlin set集合
fun main() {
    //set集合不会出现重复元素
    val set: Set<String> = setOf("lisi", "wangwu", "zhaoliu", "zhaoliu")
    println(set)
    //set[0], set不能通过下标去取
    println(set.elementAt(0))//[0]
    println(set.elementAt(1))//[1]
    println(set.elementAt(2))//[2]
    println(set.elementAt(3))//[3] ,会崩溃,越界

    //下面两种方式不会出现越界报错,与空并操作符一起使用
    //使用set和list集合尽量使用此方式,防止越界崩溃
    println(set.elementAtOrElse(0) { "越界" })
    println(set.elementAtOrNull(0) ?: "越界了")


}

7、Kotlin 可变set集合 mutableSetOf

//TODO Kotlin set 可变集合
fun main() {
    //set集合不会出现重复元素
    val set: MutableSet<String> = mutableSetOf("lisi", "wangwu", "zhaoliu", "zhaoliu")
    set += "张三"
    set += "李四"
    println(set)
    set -= "赵六"
    println(set)
    set.add("aaa")
    println(set)
    set.remove("bbb")
    println(set)


}

8、Kotlin 集合转换与快捷函数

//TODO Kotlin 集合转换与快捷函数
fun main() {

    val list: MutableList<String> = mutableListOf("zhangsan", "zhangsan", "lisi", "wangwu") //list可以重复


    //list转set,并且去重
    val set = list.toSet()

    //还是list,也可以去重
    val list2 = list.toSet().toList()

    //快捷方式去重,转可变set后再转为list
    println(list.distinct())


}

9、Kotlin 中数组类型

import java.io.File

//TODO Kotlin 数组
fun main() {
    //1. initArrayOf,常规操作的越界崩溃,int 类型转数组
    val initArray = intArrayOf(1, 2, 3, 4, 5)
    println(initArray[0])
    println(initArray[6])//会抛越界异常

    //不会崩溃的方式,只能传int -1 代表越界
    println(initArray.elementAtOrElse(6) { -1 })
    println(initArray.elementAtOrNull(6) ?: "越界")//加空并操作符一起用

    //对象数组 Array<File>对象类型
    val array = arrayOf(File("AAA"), File("BBB"))

    //集合可以转数组
    val charArray = listOf('A', 'B', 'C').toCharArray()

}

10、Kotlin Map创建,读取Map值

//TODO Kotlin Map 定义
fun main() {
    val mMap: Map<String, Double> = mapOf("zhangsan" to (532.2), "lisi" to 453.1)
    val map2 = mapOf(
        Pair("zhangsan", 451.2), Pair("lisi", 545.3)
    )

    val map = mapOf("zhangsan" to 123,"lisi" to 456)
    println(map["zhangsan"])
    println(map["lisi"])
    println(map["lisi222"])//找不到,返回null,不会崩溃

    //方式二 得不到给我一个默认值 get与[]等价
    println(map.getOrDefault("zhangwu",-1))

    //方式三
    println(map.getOrElse("dsad"){-14})
}

11、Kotlin中的map 遍历

fun main() {
    val map = mapOf("zhangsan" to 123, "lisi" to 456)

    //1、foreach
    map.forEach {
        //it == 每个元素 K和V
        // it类型 Map.Entry<String,Int>

        println("K:${it.key} V:${it.value}")
    }
    println()


    map.forEach { key, value ->
        println("K:$key,V:$value")

    }

    println()
    map.forEach { (k, v) ->
        println("K:$k,V:$v")

    }

    //for循环
    for (i in map) {
        // i类似于it
        println("K:${i.key},V:${i.value}")
    }

}

12、Kotlin 可变map集合

//TODO Kotlin 可变Map
fun main() {
    val map = mutableMapOf("zhangsan" to 123, "lisi" to 456)
    map += "aaa" to (111)
    map += "bbb" to 236

    map -= "zhangsan"
    map["ccc"] = 888
    map.put("DDD", 999)

    //getOrPut 有的情况
    //如果整个map没有fff的Key,就帮你先添加到map中去
    val r = map.getOrPut("fff") { 555 }

    println(r)
    println(map["FFF"])//已经添加了,可以获取到

    //getOrPut 有
    //能获取到数据,后面得666备用值失效
    val e = map.getOrPut("aaa") { 666 }

    println(e)


}