Kotlin系列(二)——容器

在这里插入图片描述
Kotlin号称全面兼容Java,因此,容器类在Kolin中是存在的。当然,Kotlin也对其新增了一些方法。下面开始进行介绍;

容器的基本操作

Kotlin也拥有三类基本的容器,分别是集合Set、队列List、映射Map。每类容器又分作只读和可变两种类型。只读就表明对于该容器只有读的能力,而增删改就必须使用可变的类型了。Kotlin规定每个变量在定义的时候必须指定是否能够修改。如定义var和val。容器也类似,默认的新容器都是只读容器,如果需要允许修改容器变量,就需要加上Mutable前缀形成新的容器,比如:MutableList、MutableMap、MutableSet,这三种都是可变容器。只有可变容器才能对其内部元素进行增、删、改操作。

这三种基本容器也拥有相同的容器方法,具体如下;

  • isEmpty:判定该容器是否为空
  • isNotEmpty:判断该容器是否非空
  • clear:清空该容器
  • contains:判定该容器是否包含指定元素
  • iterator:获取该容器的迭代器
  • count:获取该容器的元素个数,也可以通过size属性获得

kotlin允许在声明容器变量的时候就进行初始化赋值,如同对数组变量进行初始化一样。而java的容器类是无法同时声明并初始化的。

例: val nums:List = listOf(“1”,“2”,“3”,“4”)

容器名称初始方式
只读集合SetsetOf
可变集合MutableSetmutableSetOf
只读队列ListlistOf
可变队列MutableListmutableListOf
只读映射MapmapOf
可变映射MutableMapmutableMapOf

集合Set/MutableSet

集合的特性是无序,所以说不能通过下标来进行访问。且容器的内部存在唯一性,所以可以通过哈希值校验是否存在相同的元素,覆盖相应元素。
区别于java、,Set是只读集合,只具有读的权限,初始化赋值后便不可更改。所以元素变更的方法都是用于MutableSet。其有一下限制:

  1. MutableSet的add方法添加元素是不确定下标的,这是由于集合是无序的
  2. MutableSet没有修改元素值的方法,一旦确定,就不可被修改
  3. MutableSet的remove方法可以用于删除的指定元素。但是不能删除某个位置的元素,因为集合是无序的。

遍历方式有三种,for-in循环、迭代器循环、forEach遍历

1. for-in循环

		val mutableSetOf = mutableSetOf<String>("1", "2", "3", "4")
        for (i in mutableSetOf){
            print("元素 $i")
        }

2. 迭代器循环

        val mutableSetOf = mutableSetOf<String>("1", "2", "3", "4")
        val iterator = mutableSetOf.iterator()
        while (iterator.hasNext()) {
            val item = iterator.next()
            println("元素 $item")
        }

3. forEach遍历

        val mutableSetOf = mutableSetOf<String>("1", "2", "3", "4")
        mutableSetOf.forEach{
            println("元素 $it")
        }

总结: 在实战中存在诸多不足,主要是以下几点:

  • 不允许修改内部元素的值
  • 无法删除指定位置的元素
  • 不能通过下标获取指定位置的元素

因此,大多数场合都是用的队列和映射


队列List/MutableList

队列是一种元素之间按照顺序排列的容器;相比于集合,队列多了次序管理。他有如下几点特性:

  1. 队列能够通过get方法获取指定位置的元素,也可以直接通过下标获得元素
  2. MutableList的add方法每次都是把元素添加到末尾,也可以指定添加的位置
  3. MutableList的set方法允许替换或者修改指定的位置元素
  4. MutableList的removeAt方法允许删除指定位置的元素

相比于集合,队列还多了一种按照元素下标循环遍历的方式:

        val mutableListOf = mutableListOf("1", "2", "3")
        for (i in mutableListOf.indices) {
            val item = mutableListOf[i]
            println("第 $i 个元素的内容是 $item")
        }

映射Map/MutableMap

Kotlin的映射和java相同,每个元素的键和值都是一一对应的关系,相同键名只想的键值是唯一的,所以说映射中每个元素的键名各不相同,这个特性使得映射的变更操作与队列存在以下不同之处(MutableMap操作,Map只读)

  1. containsKey方法判断是否存在指定键名的元素,containsValue判断是否存在指定键值的元素
  2. put方法在添加的时候,会根据键名寻找同名元素,如果找不到就添加新元素,如果找得到就替换旧元素
  3. remove方法是通过键名来删除元素的
  4. 初始化隐射,有两种方式可以表达单个键值对元素。其一是”键名 to 键值,其二是采取Pair配对方式。代码如下
        //两种方式在可读映射和可变映射都拥有
        val mapOf = mapOf("1" to "one", "2" to "two", "3" to "three")
        
        val mutableMapOf = mutableMapOf(Pair("1", "one"), Pair("2", "two"), Pair("3", "three"))

映射和集合的遍历差不多,但是元素不相同所以方式有点差异。代码如下
1. for-in循环

		 val mutableMapOf = mutableMapOf(Pair("1", "one"), Pair("2", "two"), Pair("3", "three"))
        for (item in mutableMapOf){
          println("键名 $item.key  键值$item.value")
        }

2. 迭代器循环

        val mapOf = mapOf("1" to "one", "2" to "two", "3" to "three")
        val iterator = mapOf.iterator()
        while (iterator.hasNext()) {
            val item = iterator.next()
            println("键名 $item.key  键值$item.value")
        }

3. forEach遍历

        val mapOf = mapOf("1" to "one", "2" to "two", "3" to "three")
        mutableSetOf.forEach{ key, value -> 
            println("键名 $key  键值$value")
        }

如果编写之间有问题,希望大家能够及时指正,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值