• Kotlin 开发Android app(四):Kotlin 四大容器Set,Array,List,Map


    在做Kotlin 的开发中,数据结构的使用使我们操作程序的基础,在Kotlin 中有四种重要的容器,分别为ArraySetListMap,如果之前有接触过其他的语言编程的话,那么对这四种容器应该是非常熟悉的。

    我们简单的介绍一下Set,叫做集合,跟我们数学里学到的集合概念差不多,Array 之前在说数组的时候就有提到过,是用来建立数组的。List为链表,这是在数据结构中,特别重要的一个概念。Map为字典,key-value键值对,一一对应,如同我们的字典一样。

    在这些容器中,有些是共同的特性,有些是每个类型中特有的,我们先把特有的介绍一下,再来说说他们之间的共性。

    Kotlin中,容器为两大类,一类是不可变容器,一类是可变容器。可变容器在不可变容器的前面加上Mutable。为什么要分为这样,这也许是为了运行速度。

    在这里插入图片描述

    去重可以集合set

    在统计中,在统计日活是需要把重复的人员过滤掉,这时候使用集合set那就是在适合不够了,他自动的帮我们过滤掉重复的人员。

            var people:MutableSet<String> = mutableSetOf("user1","user2")
    
            people.add("user3")
            people.add("user1")
    
            people.forEach { println(it) }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我们定义了MutableSetpeople 他可以用来存放用法,一开始有两个用户,后来又来了两个,但是user1 重复了。

    这时候输出的也是三个用户:

    I/System.out: user1
    I/System.out: user2
    I/System.out: user3
    
    • 1
    • 2
    • 3

    集合set 还有一个用处就是用来做交集,在统计中可以用来统计同时使用两个功能的用户。

            var feature1 :MutableSet<String> = mutableSetOf("user1","user2","user3")
            var feature2 :MutableSet<String> = mutableSetOf("user2","user3","user4")
    
            var all = feature1.intersect(feature2)
    
            all.forEach { println(it) }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    用户 1,2,3用了功能1,用户2,3,4用了功能2,那么同时用了功能1和功能2的有哪些用户了,这就是用集合来进行交集计算。

    I/System.out: user2
    I/System.out: user3
    
    • 1
    • 2
    常见的容器遍历操作

    这是容器中都可以用的功能,对一个容器进行遍历操作是常见的事情。

    • 1.for-in循环

    这是c语言的一种常见形式,有点变形,但用法想法是一样的。

            var array1:Array<Int> = arrayOf(1,2,2,3)
    
            for(item in array1){
                println(item.toString())
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    打印的结果为:

    I/System.out: 1
    I/System.out: 2
    I/System.out: 2
    I/System.out: 3
    
    • 1
    • 2
    • 3
    • 4
    • 2.forEach遍历

    forEach 的遍历方法,和其他语言相比还是有点不用的,KotlinforEach 直接是变量的方法,这还是挺少见的。

            var array1:Array<Int> = arrayOf(1,2,2,3)
    
            for(item in array1){
                array1.forEach { println(it) }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    打印的结果为:

    I/System.out: 1
    I/System.out: 2
    I/System.out: 2
    I/System.out: 3
    
    • 1
    • 2
    • 3
    • 4

    这里又见it 关键变量,在Kotlin 中,如果变量中的方法带{},那么一定有一个隐藏变量 it 来指代它,这个它是谁要看方法而定。

    对于map 定义keyvalue的时候用的是关键字to,其实这样不如用:方便。

            var map1:MutableMap<String,Int> = mutableMapOf("tomato" to 1,"apple" to 2)
    
            map1.forEach { println(it.key + ": " + it.value.toString()) }
    
    • 1
    • 2
    • 3
    • 3.List的特殊遍历方法

    List是个队列,有序标方法,我们可以用序标的方式进行访问它。set 是不能用这种方式的,因为他没有序标。

            var list1:MutableList<String> = mutableListOf("user1","user2","user3")
    
            for(i in list1.indices){
                println(list1[1])
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    打印结果如下:

    I/System.out: user1
    I/System.out: user2
    I/System.out: user3
    
    • 1
    • 2
    • 3
    排序

    如果我们相对一个容器进行排序的话,最好是用List或者Mapset 是不能用来排序的。

            var list2:MutableList<Int> = mutableListOf(4,5,1,2,6,89,34)
    
            list2.sort()
    
            list2.sortBy { -it }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sort为升序排序,sortBy 为自定义排序。

    小结

    这是 对于 Kotlin 中容器的一些使用的方法,在项目中我们可以选择自己需要的容器类型,不同的容器有不同的作用。

    Kotlin 引入的it的关键字,起到了很好的作用,简化了很多编程的过程。

  • 相关阅读:
    Maven插件之 maven-dependency-plugin 分析依赖复制文件
    Adaptive AUTOSAR Technology Sharing
    java计算机毕业设计物业综合信息管理系统源码+数据库+系统+lw文档+mybatis+运行部署
    kubernetesl yaml deploy rancher server
    【计算机视觉(CV)】基于图像分类网络VGG实现中草药识别(二)
    声卡喊话IP喇叭,IP网络吸顶天花喇叭
    Egg如何实现文件上传
    Python基础教程:列表推导式详解
    ECC加密算法的数学原理
    后端基础php
  • 原文地址:https://blog.csdn.net/weixin_40425640/article/details/127804379