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(…)
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 }
不難看出基本用法還是比較簡單的,也比較容易上手。