Kotlin集合List Set Map使用介绍详解

 更新时间:2022年09月06日 10:14:29   作者:niuyongzhi  
集合是可变数量(可能为0)的一组条目,kotlin标准库提供一个整套用于集合管理的工具,各种集合对于解决问题都具有重要意义,并且经常用到。kotlin中的集合与Java基本类似

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()}

到此这篇关于Kotlin集合List Set Map使用介绍详解的文章就介绍到这了,更多相关Kotlin List Set Map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android自定义view贝塞尔曲线

    Android自定义view贝塞尔曲线

    这篇文章主要为大家详细介绍了Android自定义view贝塞尔曲线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Android编程实现微信分享信息的方法

    Android编程实现微信分享信息的方法

    这篇文章主要介绍了Android编程实现微信分享信息的方法,实例分析了Android官方demo示例,讲述了Android微信分享功能的具体实现技巧,需要的朋友可以参考下
    2015-10-10
  • Android实现带数字的圆形进度条(自定义进度条)

    Android实现带数字的圆形进度条(自定义进度条)

    在项目开发中经常遇到带圆形进度条的需求,在GitHub上逛了一圈,发现没有,今天小编抽空给大家分享Android实现带数字的圆形进度条(自定义进度条),需要的朋友参考下
    2017-02-02
  • 30条android项目开发技巧与经验总结

    30条android项目开发技巧与经验总结

    本文为大家总结了30条android项目开发技巧与经验,,需要的朋友可以参考下
    2018-04-04
  • 详解Android客户端与服务器交互方式

    详解Android客户端与服务器交互方式

    这篇文章主要介绍了详解Android客户端与服务器交互方式-小结,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • Android MQTT与WebSocket协议详细讲解

    Android MQTT与WebSocket协议详细讲解

    MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议
    2022-11-11
  • Android 属性动画原理与DataBinding

    Android 属性动画原理与DataBinding

    这篇文章主要介绍了Android 属性动画原理与DataBinding的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android编程之简单逐帧动画Frame的实现方法

    Android编程之简单逐帧动画Frame的实现方法

    这篇文章主要介绍了Android编程之简单逐帧动画Frame的实现方法,结合实例较为详细的分析了Android逐帧动画的原理、步骤与具体实现技巧,需要的朋友可以参考下
    2015-12-12
  • Android仿微信发表说说实现拍照、多图上传功能

    Android仿微信发表说说实现拍照、多图上传功能

    这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Kotlin协程之Flow异常示例处理

    Kotlin协程之Flow异常示例处理

    这篇文章主要为大家介绍了Kotlin协程之Flow异常处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论