集合是我们常用的一种数据结构,可以作为值传给函数,和我们学过的其他变量类型一样,List、Set、Map的类型分为两类,只读和可变。

一.List集合

1.List创建与元素获取

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

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

fun main() {
    //listOf 创建不可变集合
    val listOf = listOf("Jason", "Jack", "Jacky")
    //超出索引值输出lambda表达式内容
     println(listOf.getOrElse(3){"Unknown"})
    //超出索引值输出null
     println(listOf.getOrNull(3))
}

  

2.可变List集合

        在Kotlin中,支持内容修改的列表叫可变列表,要创建可变列表,可以使用mutableListOf函数。List还可以使用toList和toMutableList函数动态实现自读列表和可变列表的互换。

fun main() {
    //mutableListOf 创建可变集合
    val mutableList = mutableListOf("Jason", "Jack", "Jacky")
    //添加一个元素
    mutableList.add("XiaoHua")
    //移除一个元素
    mutableList.remove("XiaoHua")
    //转不可变
    val toList = mutableList.toList()
    //转可变
    val toMutableList = toList.toMutableList()
    println(mutableList)
    println(toList)
    println(toMutableList)
}

3.mutator函数

        能修改可变列表的函数有个统一的名字:mutator函数

fun main() {
    //mutableListOf 创建可变集合
    val mutableList = mutableListOf("Jason", "Jack", "Jacky")
    //+=  与add一样效果
    mutableList+="Jimmy"
    //-= 与remove 一样效果
    mutableList-="Jimmy"
    //移除符合条件的参数
    mutableList.removeIf {
        it.contains("Jack")
    }
    println(mutableList)
}

4.集合遍历

        

fun main() {
    //mutableListOf 创建只读集合
    val list=listOf("Jason", "Jack", "Jacky")
    //遍历
    for (s in list) {
        print(s)
    }
    //遍历
    list.forEach {
        print(it)
    }
    //遍历是获取索引
    list.forEachIndexed { index, item ->
        print("$index, $item")
    }
}

       

5.解构与去重

fun main() {
    //mutableListOf 创建只读集合
    val list=listOf("Jason", "Jack", "Jacky")
    //结构语法
    //把list集合里的值 赋值给前面的属性 给他下划线就可以跳过该位置的属性赋值
    val (origin,_,roxy)=list
    print("$origin   $roxy")

    print(listOf("Jason", "Jack", "Jacky", "Jack").distinct())  //list 也有的去重方法
}

二.Set集合

1.Set创建与元素获取

        通过setOf创建Set集合,使用elementAt函数读取集合中的元素。

fun main() {
    //不可变 set集合    
    //set集合自动去重
    val set = setOf("Jason", "Jack", "Jacky", "Jack")
    //set[1]  没有这种写法
    println(set.elementAt(2))  //取元素
}

2.可变集合

        通过mutableSetOf创建可变的set集合

fun main() {
    //可变set集合
  //set集合自动去重                                     
    val mutableSetOf = mutableSetOf("Jason", "Jack", "Jacky", "Jack")
    //添加元素
    mutableSetOf+="XiaoHua"
    //Set集合取值
    print(mutableSetOf.elementAt(2))
}

3.集合转换

fun main() {
    val mutableList = mutableListOf("Jason", "Jack", "Jacky", "Jack")
    //我们可以通过List集合转Set集合驱虫
    val toList = mutableList.toSet()
    //转回List集合
    val toList1 = toList.toMutableList()
    println(toList1)
}

三.Map集合

1.Map创建

        to虽然看着像关键字,但他实际上是个省略了点号和参数的特殊函数,to函数将它左边和右边的值转化成一对Pair

fun main() {
    val mapOf2 = mapOf("123" to 123, "Jason" to 18, "Jack" to 30)//这也是一种方式
    //123 to 123 其实是  "!23".to(123)  因为用了 infix关键字 .和() 都省略了

    val mapOf1 = mapOf(Pair("312", 12312), Pair("123", 124214))//这也是一种创建方式
    println(mapOf1)
    println(mapOf2)
}

        

2.读取Map的值

       

fun main() {
    val mapOf2 = mapOf("123" to 123, "Jason" to 18, "Jack" to 30)//这也是一种方式
    //这些是Map集合的取值方法
       print( mapOf2.get("Jack"))
       print( mapOf2.getValue("Jack")) //如过要取的值为空,则报异常
       print( mapOf2.getOrElse("13"){"Unknown"}) //没有这个值 放回后面lambda表达式的内容
       print( mapOf2.getOrDefault("13",0)) //没有这个值 ,输入默认值
       print(mapOf2["123"])
}

3.遍历

fun main() {
    val mapOf2 = mapOf("123" to 123, "Jason" to 18, "Jack" to 30)//这也是一种方式
    //以下是遍历方式
    mapOf2.forEach {
         print("${it.key}    ${it.value}    ")
    }
                    //参数解构了
    mapOf2.forEach { (key, value) ->

          print("$key    $value"   )
    }
}

4.可变集合

        通过mutableMapOf创建可变的Map。

fun main() {
    val mutableMapOf = mutableMapOf("123" to 123, "Jason" to 18, "Jack" to 30)
    mutableMapOf +="12312" to  42124  //添加元素
    mutableMapOf["1231241"] = 12213  //修改元素
    mutableMapOf.getOrPut("Rose",{12312}) //先取值,当集合里没有当前要取得值时,会填进去一个默认值
    print(mutableMapOf)

        

下一篇: Kotlin基础 定义类与初始化、继承

      

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐