1. 程式人生 > >Kotlin中Set、Map、List 容器使用

Kotlin中Set、Map、List 容器使用

前言

之前講了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 }

不難看出基本用法還是比較簡單的,也比較容易上手。