Kotlin学习笔记(四)

集合

集合可以方便我们处理一组数据,也可以作为值参传递给函数,和我们学过的其他变量类型一样,List、Set和Map类型的变量也分为两类,只读可变

 List

创建与获取元素

使用 listOf创建给定元素的只读list,使用 mutableListOf创建可变list。并且可以同 toList和toMutableList函数实现只读列表和可变列表的相互转换。

getOrElse是一个安全索引取值函数,它需要两个参数,第一个是索引值,第二个是能提供默认值的lambda表达式,如果索引值不存在的话,可用来代替异常。

getOrNull是Kotlin提供的另外一个安全索引取值函数,当索引值不存在时,它返回null,而不是抛出异常。

fun main() {
    val names1 = listOf("Honey", "Luffy", "Kitty")
    //println(names1[3])//会抛异常:java.lang.ArrayIndexOutOfBoundsException

    val names2 = names1.toMutableList()
    names2.add("Jim")
    println(names2[3])
    println(names2.get(3))//与names2[3]是一样的
    println("names中的第3号元素:${names2.getOrElse(3) { "Index out of bounds" }}")
    println("names中的第4号元素:${names2.getOrElse(4) { "Index out of bounds" }}")

    val names3 = mutableListOf("Honey", "Luffy", "Kitty")
    names3.add("Jack")
    names3.add("Lucky")
    println("names中的第2号元素:${names3.getOrNull(2) ?: "Index out of bounds"}")
    println("names中的第5号元素:${names3.getOrNull(5) ?: "Index out of bounds"}")
}

mutator函数

能修改可变列表的函数统称为 mutator函数。

import java.util.function.Predicate

fun main() {
    val names1 = mutableListOf("Honey", "Luffy")
    names1 += "Kitty"//添加元素运算符
    println("names1 = $names1")
    names1.add("Jim")
    println("names1 = $names1")

    names1 -= "Kitty"//删除元素运算符
    println("names1 = $names1")
    names1.remove("hh")
    println("names1 = $names1")
    names1.removeIf {names1.contains("aa")}
    println("names1 = $names1")
}

遍历集合

可以通过for in、forEach、forEachIndexed遍历集合。

fun main() {
    val names1 = mutableListOf("Honey", "Luffy", "Jim")
    for (name in names1) {
        println(name)
    }
    println("---------------------------------")
    names1.forEach { println("$it") }
    println("---------------------------------")
    names1.forEachIndexed { index, name -> (println("$index,$name")) }
}

 解构

通过下划线“_”过滤不想要的元素。

fun main() {
    val names1 = listOf("Honey", "Luffy", "Jim")
    val (origin, proxy, _) = names1
    println("origin = $origin,proxy = $proxy")
}

 我们反编译一下就会发现,list的第三个元素没有赋值给任何变量:

Set集合

Set的创建与List比较相似,使用setOf和mutableSetOf分别可以创建不可变Set和可变Set,通过elementAt取指定索引的值。跟Java中一样,Set集合不允许有重复的元素。

fun main() {
    val names1 = setOf("Honey", "Luffy", "Jim", "Honey")
    //names1[1] //Set没有这种写法
    println("names1 = $names1")

    val names2 = mutableSetOf("Honey", "Luffy", "Jim")
    names2 += "Honey"
    println("names2 = $names2")
    //通过elementAt取指定索引的值
    println("name2的一号元素:${names2.elementAt(0)}")
}

集合转换

把 List通过 toSet函数转换成 Set,去掉重复元素之后,再把 Set转成 List。Kotlin提供了一个更快捷的函数 distinct可实现 List的去重。

fun main() {
    val names = listOf("Honey", "Luffy", "Kitty", "Luffy", "Kitty", "Jack", "Honey", "Lucky", "honey")
    val newNames = names.toSet().toList()
    println("newNames = $newNames")
    //去重快捷函数
    val distinctNames = names.distinct()
    println("distinctNames = $distinctNames")
}

数组类型

Kotlin提供了好多数组类型,虽然是引用类型,但可以编译成Java基本数据类型。

fun main() {
    val intArray1 = intArrayOf(6, 8, 520, 1314)
    print("intArray1 = ")
    intArray1.forEach { print("$it,") }
    println()

    val intList = listOf(5, 6, 8)
    println("intList = $intList")

    val intArray2 = intList.toIntArray()
    print("intArray2 = ")
    intArray2.forEach { print("$it,") }
    println()

    val names = listOf("Honey", "Luffy", "Kitty")
    println("names = $names")

    val namesArray = names.toTypedArray()
    print("intArray1 = ")
    namesArray.forEach { print("$it,") }
}

 Map集合 

通过 mapOf创建Map集合,用 to创建键值对,to看上去像关键字,但事实上,它是省略了点号和参数的特殊函数,to函数将它的左边和右边的值转化成了Pair类型。

fun main() {
    //创建map的两种方式
    val stuInfo = mapOf("Honey" to 17, "Luffy" to 21, "Kitty" to 6)
    val stuInfo2 = mapOf(Pair("Honey", 17), Pair("Luffy", 21), Pair("Kitty", 6))
    //取值
    println(stuInfo["Honey"])
    println(stuInfo.getValue("Luffy"))
    println(stuInfo.getOrElse("Jim") { "Unknown" })
    println(stuInfo.getOrDefault("Lucky", -1))
}

遍历map

fun main() {
    val stuInfo = mapOf("Honey" to 17, "Luffy" to 21, "Kitty" to 6)
    stuInfo.forEach { println("${it.key},${it.value}") }
    println("*********")
    stuInfo.forEach { (name, age) -> println("$name,$age") }
}

可变集合

通过 mutableMapOf创建可变Map。

getOrPut函数表示当键值对不存在时,添加并返回结果,否则就返回已有的键值对。

fun main() {
    val stuInfo = mutableMapOf("Honey" to 17, "Luffy" to 21, "Kitty" to 6)
    stuInfo += "Franck" to 28
    val age = stuInfo.getOrPut("Lucky") { 8 }
    println(age)
    println(stuInfo)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值