前言

之前讲了Kotlin中基本数据类型和String字符串拼接的一些基本用法,这里学习一下kotlin中数组和集合容器,其实挺想上来就用kotlin写页面的,毕竟那样有成就感,也不会枯燥无味,但是从java学过来深知基础的重要,所以还是一步一步来。

数组声明

kotlin中基本类型的数组声明,初始化一个整形数组:

  var int_arr: IntArray = intArrayOf(1, 2, 3, 4, 5,6 )

可以看出来相对于java,kotlin:

kotlin 声明整形数组的关键字为:IntArray
kotlin分配一个常量数组通过intArrayof方法

从这可以看出kotlin声明数组的方式为:var 数组名称 :IntArray(数组类型) = intArrayof(…)
由这个整形数组我们可以看出kotlin声明数组的形式。但是kotlin中数据是不包含字符串数组的如果你要声明一个字符串数组:

 var str :Array<String> = arrayOf("hello","world")

看到字符串可以这样声明,那其它基本类型可不可以也这样呢?

   var my_int : Array<Int> = arrayOf(1,2,3)

答案是可以的,这里和java中ArrayList很像

数组遍历

我们知道在java中获取一个数组的长度是通过“.length”,遍历一个数组可以通过for循环,而在kotlin中获取数组的长度通过“.size”方法。接下来看看kotlin是如何遍历的:

      var test_name: Array<String> = arrayOf("小米", "小马", "小张")
        my_name.setOnClickListener {
            var str: String = ""
            var i: Int = 0
            while (i < test_name.size) {
                str = str + test_name[i] + "----"
                i++
            }
            my_name.text = str
        }

这里是通过while循环来给my_name 赋值其实和Java中的for循环很类似。
在这里插入图片描述
当然kotlin中的数组还有set和get方法如果想要取数组中的某个值或者设置某个值只需要

   test_name.set(2, "小李子")//设置数组中某个位置的值
   str = test_name.get(2)//获取数组中某个位置的值

字符串的分割、拼接

kotlin的分割拼接操作基本上和java相同的,替换:replace 查找 ** indexOf** 截取 ** substring**

   var list:List<String> = str.split(",")

不同的地方大概就是在kotlin中split返回值是一个"List<String" 而在Java中是一个数组,其他的地方就需要实际开发中灵活运用了。

kotlin中容器

其实这里的容器就是Java中的集合,我们知道java中有Set 、List和Map,Kotlin是兼容java中这些容器的,那在kotlin中这三大容器又是如何操作的?
首先和Java不同kotlin的每种容器又分为:只读容器和可变容器两种,只有可变容器才可以进行增删改查操作。
既然都是容器他们也有很多共同的API:

  • isEmpty:判断容器是否为空
  • isNotEmpty:判断该容器是否非空
  • clear 清空该容器
  • contains 判断容器是否包含某元素
  • iterator 迭代器
  • count 获取容器长度

上面提到kotlin中容器可分为可变容器和只读容器它们的关键字是(从左到右分别是容器类型、容器名称、容器的初始化方法):

只读集合 Set setOf
可变集合 MutableSet mutableSetOf
只读队列 List listOf
可变队列 MutableList mutableListOf
只读映射 Map mapOf
可变映射 MutableMap mutableMapOf

集合

看一下kotlin中set集合的几种遍历方式:

for in

       //for in 循环
        var food:String = ""
        val food_set: Set<String> = setOf("大米","小米","黑米","糯米")
        for (item in food_set){
         food = food+item
        }
        Log.e("TAG",food)

迭代器iterator

        //迭代器
       val  iterator=food_set.iterator()
        while (iterator.hasNext()){
            val item=iterator.next()
            food = food+item
        }
            Log.e("TAG",food+"---")

forEach遍历

         food = ""
        food_set.forEach { food= food+it }

到这里就可以很明了的看到其实kotlin对集合的遍历操作和Java是差不多的。

队列

队列的遍历方式基本上是和上面集合是一样的,我们看看它有哪些特有的操作:
像get、add、removeAt和java一样。重点看一下MutableList的的sort操作。

sortBy :按照指定条件升序排序
sortByDescending: 按照指定条件降序排序

用法如下

    //队列排序
        var my_list :MutableList<String> = mutableListOf("北京","上海","南京","山东")
        my_list.sortBy { my_list.count() }//升序
        my_list.sortByDescending { my_list.size }//降序

这里根据集合的长度来决定排序方式,当然这样写没有什么实际意义。

映射(Map)

Map集合初始化的时候有两种方式一个是通过 to 关键字 一个是 Pair

         //to 声明方式
        var my_map: HashMap<Int, String> = hashMapOf(1 to "one", 2 to "two", 3 to "three")
        //Pair 声明方式
        var my_pmap: HashMap<Int, String> = hashMapOf(Pair(1, "one"), Pair(2, "two"), Pair(3, "three"))

它的三种遍历方式为:

      // for in 
        var desc = ""
        for (item in my_map) {
            desc = desc + item.key.toString() + "----" + item.value
        }
        Log.e("TAG", desc)

        // 迭代器
        val it = my_pmap.iterator()
        while (it.hasNext()) {
            val item = it.next()
            desc = desc + item.key + "=====" + item.value
        }

        //forEach 遍历
        my_pmap.forEach { key, vaule -> desc = desc + vaule + key }

不难看出基本用法还是比较简单的,也比较容易上手。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐