> 文档中心 > kotlin 基础 数组、集合和 Map 的使用

kotlin 基础 数组、集合和 Map 的使用


kotlin 基础入门

第四章 kotlin 常见 数组、集合 和 Map 的使用


文章目录

  • kotlin 基础入门
  • 前言
    • 1、List 创建与元素获取
    • 2、可变List 集合
    • 3、mutator 函数
    • 4、List 集合遍历 三种常用方式
    • 5、结构语法过滤
    • 6、set 集合
    • 7、可变的set 集合
    • 8、集合转换与快捷函数
    • 9、数组类型
    • 10、Map 的创建
    • 11、读取Map 的值
    • 12、Map 的遍历
    • 13、可变的Map 集合

前言

使用纯代码 加 注释的方式,可以更快的理解源码
如果你喜欢,请点个赞,后期会不断的深入讲解


1、List 创建与元素获取

   val list = listOf("张三","大漂亮","王美丽","王五")//    正常取值方式: 索引, 内部是运算符重载 [] = get    println(list[0])    println(list[1])    println(list[2])    println(list[3])  //  println(list[4])     //  下标越界崩溃     Index 4 out of bounds for length 4//    kotlin 中,可以使用 getOrElse 和 getOrNull ,解决空指针异常,下标越界的崩溃异常//    getOrElse 在取值越界的时候,会直接返回{"啊呀,你越界了,我出来了哦"} 括号里面定义的参数    println(list.getOrElse(0){"你没有越界,我不会出来的"})    println(list.getOrElse(4){"啊呀,你越界了,我出来了哦"})//    getOrNull 在下标越界的时候,会返回一个null ,我们可以 + 空合并操作符, 使其返回一个字符    println(list.getOrNull(0))    println(list.getOrNull(4))    println(list.getOrNull(4) ?: "没错,就是这里越界了,我使用空合并操作符出来了")

2、可变List 集合

//    不可变集合    val list1 = listOf("张三","大漂亮","王美丽","王五")    println(list1)//    可变集合    val list2 =  mutableListOf("张三","大漂亮","王美丽","王五")    list2.add("tiger")    list2.remove("王五")    println(list2)//    不可变集合 to 可变集合    val list3 = list1.toMutableList()    list3.remove("大漂亮")    list3.add("tiger")    println(list3)//    可变集合 to 不可变集合    val list4 = list2.toList()//    list4.add     没有添加和删除方法    println(list4)

3、mutator 函数

    val list2 =  mutableListOf("张三","大漂亮","王美丽","王五")//    mutator 的特性 += -= 其实背后就是 运算符重载而已    list2 += "tiger"    list2 += "tt"    list2 -= "tt"    println(list2)//    removeIf  //  list2.removeIf{true}    //  如果返回的值是 true ,list2 就会自动遍历整个可变集合,一个一个的移除所有的数据    list2.removeIf{it.contains("t")}   // 过滤集合中的所有元素,只要包含 t  的数据元素,就会被移除    println(list2)

4、List 集合遍历 三种常用方式

    val list2 = mutableListOf("张三", "大漂亮", "王美丽", "王五")//    1、 for 循环遍历    for (i in list2) { print("元素是: $i  ")    }    println()//    2、forEach 遍历    list2.forEach { print("元素是: $it")    }    println()//    3、forEachIndexed 获取下标和元素的遍历    list2.forEachIndexed { index, item -> print("下标是:$index, 元素是:$item")    }

5、结构语法过滤

    val list2 = mutableListOf("张三", "大漂亮", "王美丽", "王五")//  集合配合结构语法    val (v1, v2, v3) = list2    println(v1)    println(v2)    println(v3)//    val 是只读的数据遍历,可以使用var 修改结构出来的数据    var (v11, v22, v33) = list2    v22 = "tiger"    println(v1)//    也可以使用 _ 符号,来屏蔽你不需要的接收值,算是数据优化,可以优化内存    val (_, v222, v333) = list2    println(v222)    println(v333)

6、set 集合

set 集合,元素不能重复

//    set 集合,元素不能重复    val set = setOf("张三", "大漂亮", "王美丽", "王五", "大漂亮")//    set 集合普通的取值方式//    set[0]      在set 中,没有[] 这样的功能, 取set 的集合值    set.elementAt(0)//    set.elementAt(5) 这里会越界崩溃//    set 集合 和list 集合一样,给我们提供了一种有效的取值方式,可以避免下标越界等情况的出现    set.elementAtOrElse(0){"不越界,我就不会出来"}    set.elementAtOrElse(6){"越界了哦,我出来啦"}    set.elementAtOrNull(0)    set.elementAtOrNull(6) ?: "越界啦,你返回了null,空合并操作符,让我出来和你见面"

7、可变的set 集合

//    list 中,有可变的集合,set 当然也会有啦。包括集合转变什么的,参照list 就可以    val set = mutableSetOf("张三", "大漂亮", "王美丽", "王五", "大漂亮")    set.add("tiger")    set.remove("王五")    set.removeIf{ it.contains("王")    }    println(set)

8、集合转换与快捷函数

    val list = mutableListOf("张三", "大漂亮", "王美丽", "王五", "大漂亮")//    list 转set 去重    println(list.toSet())//    list 转set 去重,再转回list    println(list.toSet().toList())//    使用快捷去重函数 distinct     println(list.distinct())    // 其实就是内部封装了一下,先把List 转换成 可变长度的set 再转换成list ,和上面的操作是一样的 

9、数组类型

在kotlin 语言中,各种数组类型,虽然使用的是引用类型,背后可以编译成Java 基本类型

IntArray  intArrayOfDoubleArray      doubleArrayOfLongArray longArrayOfShortArrayshortArrayOfByteArray byteArrayOfFloatArrayfloatArrayOfBooleanArray     booleanArrayOfArray   arrayOf    对象数组
    val intArray = intArrayOf(1, 23, 32, 5, 2, 3)//    其实数组和之前说的集合都是一样的,简单的,不再赘述    intArray[3]//    intArray[7]    下标越界,    intArray.elementAtOrElse(3) { -1 }    intArray.elementAtOrNull(66) ?: -1//    list 集合转数组    val set = intArray.toSet()    println(set)//    Array    val array = arrayOf(File("文件路径"), File("文件路径"), File("文件路径"))    println(array)

10、Map 的创建

//    在kotlin 中,下面两种创建map 的方式,其实是等价的    val map = mapOf("tiger" to "111", "ss" to "333")    val map1 = mapOf(Pair("tiger", "111"), Pair("tiger2", ""))    

11、读取Map 的值

    val map = mapOf("tiger" to 122, "tiger2" to 333)    //    方法一 找不到会返回一个null    println(map["tiger"])    println(map["tiger333"])     //  返回null//    方法二 和数组集合是一样的    println(map.getOrElse("tiger") {-1})    println(map.getOrElse("tiger222") {-1})     //找不到会返回-1    //    方法三 getOrDefault    println(map.getOrDefault("tiger", -1))    println(map.getOrDefault("tiger4444", -1))  //找不到会返回-1//    方法四  getValue    println(map.getValue("tiger"))    println(map.getValue("tiger666"))      //找不到会直接崩溃

12、Map 的遍历

    val map = mapOf(Pair("tiger", 12), Pair("tiger2", 34), Pair("tiger3", 44), Pair("tiger4", 66))//    第一种    for (i in map){ println(i) println(i.key) println(i.value)    }//    第二种    map.forEach{//  这个it 包含了 key value println(it) println(it.key) println(it.value)    }

13、可变的Map 集合

  val map = mutableMapOf(Pair("tiger", 12), Pair("tiger2", 34), Pair("tiger3", 44), Pair("tiger4", 66))//    其实就和集合数组一样的操作//    可变集合的操作 -= += [] put    map += "tiger222" to 322    map -= "tiger222"    map["dddd"] = 3000    map.put("ssss", 333)    println(map)//    getOrPut 没有传入的 tiger555 key的话,他会把这个数据,插入进整个集合    println(map.getOrPut("tiger555") { 7777 })    //    getOrPut 当需要获取的key,在集合中找到了,就直接获取集合中的对应的value 值    println(map.getOrPut("tiger555") { 999 })

书法艺术字体