全网最全面的由浅到深的Kotlin基础教程(三)

前言

本篇文章接着上一篇文章全网最全面的由浅到深的Kotlin基础教程(二)继续进阶学习kotlin,建议看完上一篇文章,再来看本篇文章。本篇文章讲解kotlin语言集合相关的语法。

1. List集合

1.1 List创建与元素获取

与java语言的List功能一致,比较简单,直接看示例代码:

fun main() {
    //完整定义
    //val listValue:List<String> = listOf<String>("A", "B", "C","D")
    //类型推断后
    val listValue = listOf("A", "B", "C","D")
    //索引获取元素值,存在索引越界的异常情况
    println(listValue[0])
    //通过getOrElse或者getOrNull提前处理索引异常情况
    println(listValue.getOrElse(4) {"默认值"})
    println(listValue.getOrNull(4) ?: "超出索引界限")
}

1.2 可变List集合

上面listOf函数定义的集合,只能读取不能更改(没有添加,移除元素的接口),mutableListOf定义的集合为可变集合,可以添加移除元素。示例代码如下:

fun main() {
    val list1 = mutableListOf("A","B", "C")
    list1.add("D")
    list1.remove("B")
    println(list1)

    //可变集合与不可变集合可以相互转换
    println(list1.toList())
}

1.3 mutable函数,具有+= -=的运算符重载

kotlin可变集合实现了+= -=的运算符重载,示例代码如下:

fun main() {
    val list1 = mutableListOf("A", "B", "C")
    list1 += "D"
    list1 += "E"
    println(list1)
    //removeIf 带条件移除元素
    list1.removeIf { it.contains("A") }
    println(list1)
}

运行结果如下:
在这里插入图片描述

1.4 List集合遍历

List集合有三种遍历方式,示例代码如下:

fun main() {
    val list = listOf(1, 2, 3, 4, 5, 6)
    for (i in list) {
        print("$i ")
    }
    println()
    list.forEach(){
        print("$it ")
    }
    println()
    list.forEachIndexed(){ i: Int, i1: Int ->
        print(" index=$i, item=$i1")
    }
}

1.5 解构语法

kotlin集合支持解构语法,如果某个元素不想解构,可以用-占位,提高效率,示例代码如下:

fun main() {
    val list = listOf(1, 2, 3)
    // 解构造语法
    val(v1,v2,v3) = list
    println("$v1,$v2,$v3")
    //过滤元素
    var(_,v4,v5) = list
    println("$v4,$v5")
}

运行结果如下:
在这里插入图片描述

2. Set集合

2.1 Set创建与元素的获取

Set集合相比List集合,不会出现重复元素,示例代码如下:

fun main() {
    //Set 不会有重复元素,有重复的会自动去掉
    val set1 = setOf("A", "B", "C", "C")
    println(set1)
    println(set1.elementAt(0))
    println(set1.elementAtOrElse(3) { "越界了" })
    println(set1.elementAtOrNull(3)?:"越界干啥")
}

运行结果如下:
在这里插入图片描述

2.2 可变Set集合

与List集合一样,只有可变Set才能添加,移除元素,示例代码如下:

fun main() {
    var mutableSetOf = mutableSetOf("sun", "sun1", "sun2")
    mutableSetOf.add("sun3")
    println(mutableSetOf)
}

在这里插入图片描述

3. 集合去重

  • 可以先把List集合转为Set集合,实现去重,然后再把Set集合转回List集合
  • 通过distinct函数实现去重

示例代码如下:

fun main() {
    var mutableListOf = mutableListOf("A", "B", "C", "C")
    println(mutableListOf)
    //List转Set集合,去重
    var toSet = mutableListOf.toSet()
    println(toSet)
    println(mutableListOf.toSet().toList())
    //distinct去重
    println(mutableListOf.distinct())
}

运行结果如下:
在这里插入图片描述

4. 数组类型

kotlin数组创建示例代码如下:

fun main() {
    var intArrayOf = intArrayOf(1, 2, 3, 4)
    println(intArrayOf[0])
    println(intArrayOf.elementAtOrElse(4) { -1 })
    println(intArrayOf.elementAtOrNull(4)?: -2)

    //集合转数组
    var listOf = listOf(1, 2, 3)
    var toIntArray = listOf.toIntArray()
    println(toIntArray)

    //对象数组
    var arrayOf : Array<File> = arrayOf(File("A.txt"), File("B.txt"))
}

5. Map集合

5.1 Map创建

Map和java中键值对意义一样,Map创建方式,直接上示例代码:

fun main() {
    val map1 = mapOf("a" to 2, "b" to 6)
    val map2 = mapOf(Pair("a", 2), Pair("B", 6))
}

5.2 读取map的值

fun main() {
    val map1 = mapOf("a" to 2, "b" to 6)
    //方式一 []
    println(map1["a"])
    println(map1["c"]) //找不到返回null
    //方式二 getOrDefault 找不到给一个默认值
    println(map1.getOrDefault("a", -1))
    //方式三 getOrElse 找不到执行一个匿名函数(lambda表达式)
    println(map1.getOrElse("b") { -1 })
    //方式四 找不到会crash,避免使用该方式
    println(map1.getValue("a"))
    println(map1.getValue("c"))
}

5.3 遍历Map

几种遍历Map的示例代码如下:

fun main() {
    val map1 = mapOf("a" to 2, "b" to 6)
    map1.forEach {
        println("key=${it.key},value=${it.value}")
    }
    println()

    map1.forEach { key, value ->
        println("key=$key,value=$value")
    }
    println()
    
    //推荐
    map1.forEach { (key, value) ->
        println("key=$key,value=$value")
    }
    println()

    for (entry in map1) {
        println("key=${entry.key},value=${entry.value}")
    }
}

5.4 可变Map集合

与Set,List集合一样,只有可变的Map集合才能添加移除元素,示例代码如下:

fun main() {
    val map1 = mutableMapOf("a" to(1), "b" to 2)
    //添加一个键值对
    map1 += "c" to 3
    //移除一个键值对
    map1 -= "a"
    //如果没有就put进去一个key value
    map1.getOrPut("d") { 4 }
    map1.forEach { (key, value) ->
        println("key=$key,value=$value")
    }
}
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于全网最详细的VSCode教程,以下是一个简短的描述: 全网最详细的VSCode教程应该包含以下内容:基本介绍、安装和设置、编辑器布局、常用快捷键、实用插件和扩展、调试功能、版本控制、代码片段等。 在基本介绍部分,应该详细介绍VSCode是什么,它的优点和特点,如何下载和安装等。 安装和设置部分应该涵盖不同操作系统上的安装步骤和注意事项。同时,还应该介绍不同配置选项,如主题、字体、缩进设置等。 编辑器布局部分应该解释各个面板和视图的作用,如侧边栏、编辑窗口、终端等。详细说明如何调整布局以优化工作流程。 常用快捷键部分应该列举常用的快捷键和相关操作,如快速打开文件、搜索、查看定义等。应该对不同功能区分操作系统进行说明。 实用插件和扩展部分应该介绍一些常见和有用的插件,如代码片段、代码格式化、调试器等。应该详细解释如何安装和使用这些插件。 调试功能部分应该详细介绍如何配置和使用调试器,包括设置断点、查看变量的值等。 版本控制部分应该介绍如何使用内置的版本控制工具,如Git,如何提交、推送和拉取代码等。 最后,代码片段部分应该教授如何创建和使用代码片段,以提高编码效率。 以上仅是对全网最详细的VSCode教程的一些简要描述。当然,真正最详细的教程可能比这个更加全面和详细,具体内容可能还包括更多高级功能和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mekeater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值