• Kotlin(八)集合List Set Map


    1.在Kotlin中可以通过以下方式创建ArrayList、LinkedList、HashSet、HashMap等。

    1. val arrayList = ArrayList<String>()
    2. val linkedList = LinkedList<String>()
    3. val hashSet = HashSet<String>()
    4. val hashMap = HashMap<String,Int>()

    2.除了上面的方式,Kotlin还提供了其他创建集合的方法。

     1)创建不可变集合。

          之所以是不可变的,是因为Kotlin针对这种方式创建的集合,不提供set,remove,add的方法。只提供了get方法。

    1. val list = listOf<Int>(1, 2, 3)
    2. val set = setOf<Int>(1, 2, 3)
    3. val map = mapOf(1 to "Jack", 2 to "Rose")

    2)创建可以变集合。通过mutable创建的集合就是可变集合,可以对集合进行add set remove操作。

    1. val mutableList = mutableListOf<Int>(1, 2, 3)
    2. val mutableSet = mutableSetOf<Int>(1, 2, 3)
    3. val mutableMap = mutableMapOf(1 to "Jack", 2 to "Rose")

    3.对List的操作。

    1. val list = listOf<Int>(1, 2, 3)
    2. //通常get的方式
    3. println(list.get(1))
    4. //之所以能使用[]类似数组的方式获取,是因为做了[]运算符重载,后面会讲到。
    5. println(list[1])
    6. //角标越界不会抛出异常,而是返回一个null
    7. println(list.getOrNull(3))
    8. //通过?:空合并操作符,?:左边的值为空,则返回右边的值
    9. println(list.getOrNull(3) ?: -1)
    10. //如果角标越界,不会抛出异常。而是返回{}lambda表达式中的值
    11. println(list.getOrElse(3) { -1 })

     1)通常通过get(index)来获取:

    list.get(1)

    2)也可以通过[index],像操作数组那样获取。之所以可以用[]来获取,是因为做了运算符重载

    list[1]

    3)getOrNull,如果发生角标越界,不会抛出异常而是返回null。可以和?:空合并操作符结合起来使用,返回一个默认值。?:左边的值为空,则返回右边的值

    list.getOrNull(3)
    list.getOrNull(3) ?: -1

    4)getOrElse接收两个参数,第一个索引值,第二个lambda表达式。如果角标越界,不会抛出异常,而是返回lambda表达式中的值。

      list.getOrElse(3) { -1 }

    5)可变集合:

     val mutableList = mutableListOf<Int>(1, 2, 3)

      set操作

    1. mutableList.set(1,2)
    2. mutableList[1] = 2

    add操作

    1. mutableList.add(4)
    2. mutableList += 5

    remove操作 :-=运算符重载,删除的是元素的值

    1. mutableList -= 5
    2. mutableList.remove(5)

     removeIf 接收一个lambda表达式,可以根据表达式中的条件进行删除。

     mutableList.removeIf { it == 4 }
    mutableList.removeIf { it.contains("H")}

     6)List集合的遍历

         可以用in遍历。

        forEach 接收一个lambda表达式,会把集合中的元素传进来。

       forEachIndexed接收一个lambda表达式,有两个参数,一个是index另外一个是对应的value

    1. for (item in list) {
    2. println(item)
    3. }
    4. list.forEach {
    5. println(it)
    6. }
    7. list.forEachIndexed { index, value ->
    8. println("$index , $value")
    9. }

    4.list集合的解构:

       可以通过_过滤掉不想要的元素。

     val (first:Int,second:Int,third:Int) = listOf<Int>(1, 2, 3)
    1. val (first: Int, _, third: Int) = listOf<Int>(1, 2, 3)
    2. println("$first $third")

    5.set集合

    1)set的获取方式和list类似 

    1. val set = setOf<Int>(1, 2, 3)
    2. set.elementAt(1)
    3. set.elementAtOrElse(1) { -1 }
    4. set.elementAtOrNull(1)

     2)可变set集合

    1. val mutableSet = mutableSetOf<Int>(1, 2, 3)
    2. mutableSet += 4
    3. mutableSet -= 2
    4. mutableSet.remove(3)
    5. mutableSet.removeIf { it==4 }

    3)list和set相互转换

         list转为set,可以去除重复元素。set中是不允许重复的。

    1. val list = mutableSet.toList();
    2. val set = mutableList.toSet();

       6.数组类型

    1. //ByteArray
    2. val byteArray = byteArrayOf(1,2,3)
    3. //IntArray
    4. val array = intArrayOf(1, 2, 3)
    5. //CharArray
    6. val charArray = charArrayOf('a','b','c')

    7.map集合

    1)map集合的创建

      Pari对象,存放的就是key value

    val map = mapOf(Pair(1, "HanMei"), Pair(2, "LiLei"))

     to看起来像一个关键子,其实to是一个函数。这种写法,后面会讲到。

    val map = mapOf(1 to "HanMei", 2 to "LiLei")

     创建可变map

    val mutableMap = mutableMapOf(1 to "HanMei", 2 to "LiLei")

     2)map的get操作

    1. println(map[1])
    2. println(map.getValue(1))
    3. println(map.getOrDefault(1, "Default"))
    4. println(map.getOrElse(1) { "default" })

     3)map的遍历

    1. map.forEach {
    2. println("%$it.key , ${it.value}")
    3. }
    4. map.forEach { (key, value) -> println("$key ,$value") }

    4)可变map的增删改

    1. val mutableMap = mutableMapOf(1 to "HanMei", 2 to "LiLei")
    2. mutableMap += 3 to "XiaoHua"
    3. mutableMap.put(4, "XiaoHua")
    4. mutableMap.getOrPut(5) { "XiaoHua" }
    5. val getValue:()->String = {
    6. "value"
    7. }
    8. mutableMap.getOrPut(5) {getValue()}

  • 相关阅读:
    async异步函数
    画家-qt-surce
    Docker安装Hadoop
    Nginx配置访问密码(在线|离线安装)
    QT+OSG/osgEarth编译之二十八:cairo+Qt编译(一套代码、一套框架,跨平台编译,版本:cairo-1.16.0)
    微服务实战声明式服务调用OpenFeign实践
    html中的定位知识点如何使用
    大数据安全 | 【实验】DES加密解密
    HTML5 基础
    前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第四章 认识项目目录
  • 原文地址:https://blog.csdn.net/niuyongzhi/article/details/126571244