Kotlin(八)集合List Set Map

本文介绍了Kotlin中集合的创建方法,包括不可变集合和可变集合,并详细讲解了List、Set、Map等集合类型的常见操作,如增删改查及遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    val arrayList = ArrayList<String>()
    val linkedList = LinkedList<String>()
    val hashSet = HashSet<String>()
    val hashMap = HashMap<String,Int>()

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

 1)创建不可变集合。

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

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

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

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

3.对List的操作。

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

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

add操作

 mutableList.add(4)
 mutableList += 5

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

    mutableList -= 5
    mutableList.remove(5)

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

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

 6)List集合的遍历

     可以用in遍历。

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

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

    for (item in list) {
        println(item)
    }

    list.forEach {
        println(it)
    }
    list.forEachIndexed { index, value ->
        println("$index , $value")
    }

4.list集合的解构:

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

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

5.set集合

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

    val set = setOf<Int>(1, 2, 3)

    set.elementAt(1)
    set.elementAtOrElse(1) { -1 }
    set.elementAtOrNull(1)

 2)可变set集合

    val mutableSet = mutableSetOf<Int>(1, 2, 3)

    mutableSet += 4
    mutableSet -= 2
    mutableSet.remove(3)
    mutableSet.removeIf { it==4 }

3)list和set相互转换

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

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

   6.数组类型

    //ByteArray
    val byteArray = byteArrayOf(1,2,3)
    //IntArray
    val array = intArrayOf(1, 2, 3)
    //CharArray
    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操作

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

 3)map的遍历

  map.forEach {
        println("%$it.key , ${it.value}")
    }

  map.forEach { (key, value) -> println("$key ,$value") }

4)可变map的增删改

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

OpenWrt 是一个开源的嵌入式操作系统,专为嵌入式设备如路由器、无线接入点和其他网络设备而设计。它提供了一个全功能的软路由系统框架,允许用户自定义和扩展路由器的功能。 OpenWrt 的软路由系统框架基于Linux内核,并使用了一系列开源软件包和工具。下面是 OpenWrt路由系统的基本框架: 1. Linux 内核:OpenWrt 使用 Linux 内核作为底层操作系统,并且支持最新的稳定内核版本。Linux 内核提供了网络协议栈、设备驱动程序和其他基本功能。 2. 用户空间:OpenWrt 提供了一个完整的用户空间环境,包括基本的 Unix 工具和命令行界面。用户可以通过命令行或者 Web 界面来配置和管理路由器。 3. 网络配置:OpenWrt 提供了灵活的网络配置选项,可以根据用户需求来配置各种网络接口、地址分配、防火墙规则等。 4. 软件包管理:OpenWrt 使用 opkg 包管理器来管理软件包,用户可以通过 opkg 命令来安装、升级和删除软件包。OpenWrt 的软件包库中包含了大量的软件包,包括网络服务、安全工具、媒体服务等。 5. LuCI Web 界面:OpenWrt 默认提供了 LuCI Web 界面,用户可以通过浏览器来配置和管理路由器。LuCI 提供了直观的图形界面,使用户可以方便地进行路由器设置。 6. 插件和扩展:OpenWrt 支持插件和扩展,用户可以根据需要添加自定义的功能和应用。用户可以通过编写脚本、安装软件包或者修改配置文件来实现扩展。 总的来说,OpenWrt 的软路由系统框架提供了灵活、可定制的路由器操作系统,使用户可以根据自己的需求来配置和管理路由器功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

niuyongzhi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值