在 Kotlin 中,Map 是一種鍵值對的集合數據結構,用于存儲一組關聯的鍵和值。Kotlin 標準庫提供了 Map 接口和多種實現類,使得操作和處理鍵值對數據更加方便。下面詳細描述 Kotlin 的 Map 的用法:
創建 Map
Kotlin 提供了幾種方式來創建 Map:
使用 mapOf() 函數創建具有指定內容的只讀映射,并以成對的列表的形式給出,其中第一個值為鍵,第二個為值。
val map: Map<String, Int> = mapOf("one" to 1, "two" to 2, "three" to 3)
使用 mutableMapOf() 函數創建可變映射:
val mutableMap: MutableMap<String, String> = mutableMapOf("apple" to "red", "banana" to "yellow")
基本操作
獲取值:
package com.zetcodefun main() {val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)println(items["Tom"])println(items.getValue("Tom"))println(items.get("Tom"))println(items.getOrDefault("Tom", 0))println(items.getOrDefault("Tom", 0))val nOfPencils = items.getOrElse("Tom", { 0 })println(nOfPencils)
}
獲取大小:
val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)println("${items.size},${items.count()}")
獲取所有元素,鍵,值
val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)println("${items.entries},${items.keys},${items.values}")
判斷是否包含鍵:
val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)println("Lisa" in items)
containsKey()檢查映射是否包含密鑰,containsValue()檢查映射是否包含值
val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)println(items.containsKey("Lisa"))
可變映射特有操作
添加或修改鍵值對
val items = mutableMapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)items["Lisa"]=20items["Tab"]=34println(items.entries)
刪除鍵值對
items.remove("apple")
清空map
items.clear()
Map遍歷
val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)for ((k,v) in items){println("$k,$v")}items.forEach{(k,v)->println("$k,$v")}
Map 擴展函數
Kotlin 標準庫提供了豐富的擴展函數來操作 Map,如 filterKeys、filterValues、mapValues、keys 等。
val items = mapOf("Lisa" to 12, "Tom" to 45, "Bob" to 33, "Lili" to 2)val mappedMap = items.mapValues { it.value * 2 }println(mappedMap)val filtered = items.filterKeys { it == "Lisa" || it == "Tom" }println(filtered)val filtered2 = items.filterValues { it >= 70 }println(filtered2)val filtered3 = items.filter { it.key == "Bob" || it.value == 50 }
Map 的實現類:
Kotlin 提供了幾種 Map 的實現類,其中最常用的是 HashMap 和 LinkedHashMap:
HashMap:無序的鍵值對集合,內部使用哈希表實現,適用于快速查找。
LinkedHashMap:有序的鍵值對集合,內部使用鏈表和哈希表實現,保持鍵的插入順序。
可變 Map 和不可變 Map:
Kotlin 中的 Map 可以分為可變(MutableMap)和不可變(Map)兩種類型。可變 Map 允許添加、刪除和修改鍵值對,不可變 Map 則不能改變其內容。
val immutableMap: Map<String, Int> = mapOf("one" to 1, "two" to 2)
val mutableMap: MutableMap<String, String> = mutableMapOf("apple" to "red", "banana" to "yellow")
注意事項:
Map 中的鍵是唯一的,每個鍵關聯一個值。
不同于列表或集合,Map 是一種具有鍵值對結構的數據類型。
Map 的性能取決于底層數據結構,如 HashMap 的查找效率較高。
總之,Kotlin 的 Map 是一種用于存儲鍵值對的數據結構,提供了豐富的操作和處理功能。通過選擇合適的實現類和了解常用操作,可以更高效地處理鍵值對數據。