Kotlin之集合的創建

許多現代高級語言在很早之前就開始支持Lambda編程,但是Java到JDK 1.8之後纔開始支持,導致大量早期Java和Android開發並未使用Lambda編程的特性

而Kotlin從第一個版本就開始了對Lambda的支持,並且Kotlin中的Lambda極爲強大,我們來開始進行Lambda的入門

集合的創建與遍歷

集合的函數式API是用來入門 Lambda 的絕佳示例

傳統意義上的集合主要是List和Set,再廣泛的話Map這樣包括鍵值對的也可以包含進來

List的主要實現類是ArrayList和LinkedList

Set的主要實現類是HashSet

Map的主要實現類是HashMap

以上是Java中非常熟悉的集合

現在有一個要求,創建包含許多水果名稱大集合,在Java中可以創建一個ArrayList,將水果名稱一個個添加到集合當中,當然Kotlin也可以這樣做:

fun addFruit() {
    val list = ArrayList<String>()
    
    list.add("蘋果")
    list.add("西瓜")
    list.add("橙子")
    list.add("橘子")
    list.add("葡萄")
    list.add("香蕉")
}

Kotlin提供一個內置函數listof()來簡化初始化函數:

val list = listOf("蘋果", "西瓜", "橙子")

我們循環這個集合

fun addFruit() {

    val list = listOf("蘋果", "西瓜", "橙子")
    
    for (fruit in list) {
        println(fruit)
    }
}

需要注意的是,listof()創建的是一個不可變的集合,也就是說這個集合只能讀,不能寫

這麼設計的理由和val和類默認不可繼承是一個道理

如果我們想創建一個可變的函數,那麼使用mutableListOf()就可以了

fun addFruit() {

    val list = mutableListOf("蘋果", "西瓜", "橙子")
    list.add("香蕉")

    for (fruit in list) {
        println(fruit)
    }
}

以上是List的用法,實際上Set的用法幾乎與此一模一樣,只是將創建集合的方式變成了setOf()和mutableSetof()而已

注意:Set集合底層是使用hash映射來存放數據的,因此元素無法保證有序,這是和List集合最大的不同

Map集合:Map是一種鍵值對形式的數據結構,因此在用法上和List、Set有較大不同.傳統的Map用法是先創建一個HashMap的實例,然後將一個個鍵值對數據添加到Map中:

val map = HashMap<String, String>()
    
map.put("aa", "aaa")
map.put("aa1", "aaa1")
map.put("aa2", "aaa2")
map.put("aa3", "aaa3")

這種寫法是和Java最相似的,但是Kotlin並不建議使用put()和get()方法來對Map進行添加和讀取數據操作,而是更推薦一種類似於數組下標的語法結構:

map["abb"] = "abb"

取值則:

val va = map["abb"]

當然,這仍然不是最簡便的寫法,Kotlin提供了mapOf()和mutableMapOf()函數來繼續簡化Map的用法.在mapOf()函數中,我們可以直接傳入初始化的鍵值對組合來完成對Map集合的創建:

val map = mapOf("ab" to "ab", "bc" to "aa")

這樣看上去好像是用to關鍵字來關聯的,但其實to不是一個關鍵字,而是一個infix函數,這點在後續會補充

val map = mapOf("ab" to "ab", "bc" to "aa")

for ((key, value) in map) {
    println("name is $key, value is $value")
}

使用這種方法可以同時獲取鍵和值

微信掃描二維碼,關注我的公衆號
歡迎關注這個不是技術號的公衆號,我們聊聊別的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章