Kotlin Map
是一個介面和通用的元素集合。 Map
介面以鍵和值對的形式儲存資料。 對映的鍵是唯一的,每個鍵只保留一個值。 鍵和值可以是不同型別的對,例如<Int,Int>
,<Int,String>
,<Char,String>
等。 此介面是不可變的,它的大小固定,方法支援唯讀存取。
要使用Map介面,需要使用mapOf()
或mapOf <k,v>()
函式。
Map介面宣告
interface Map<K, out V> (source)
屬性 | 描述 |
---|---|
abstract val entries: Set<Entry<K, V>> |
它僅返回當前對映中Set 介面的所有鍵和值對。 |
abstract val keys: Set<K> |
它僅返回當前對映中Set 介面的所有鍵。 |
abstract val keys: Set<K> |
它返回當前對映中的鍵和值對的數量。 |
abstract val values: Collection<V> |
它僅返回當前對映中所有值的讀取集合。 此集合可能包含重複值。 |
Map介面中有一些非常好用的函式,Map介面的函式如下所述。
函式 | 描述 |
---|---|
fun <K, V> Map<key, value>.getValue(key: K): V |
它返回給定鍵的值,如果對映中沒有這樣的鍵,則丟擲異常。 |
operator fun <V, V1 : V> Map<in String,V>.getValue( thisRef: Any?, property: KProperty<*>): V1 |
它從當前唯讀對映返回給定物件的屬性值。 |
operator fun <K, V> Map<out K, V>.contains(key: K): Boolean |
它檢查在Map中是否包含給定的鍵。 |
fun <K> Map<out K, *>.containsKey(key: K): Boolean |
如果Map 包含指定的鍵,則返回true 。 |
fun <K, V> Map<K, V>.containsValue(value: V): Boolean |
如果map 有將一個或多個鍵對映到指定值,則返回true 。 |
fun <K, V> Map<out K, V>.getOrDefault(key: K,defaultValue: V ): V |
它返回由對映中的鍵對應的值,或者如果map不包含給定鍵的對映,則返回預設值。 |
fun <K, V> Map<out K, V>.asIterable(): Iterable<Entry<K, V>> |
它建立了一個Iterable 介面範例,它包裝原始對映,在疊代時返回資料專案。 |
fun <K, V> Map<out K, V>.asIterable(): Iterable<Entry<K, V>> |
它建立了一個Iterable 介面範例,它包裝原始對映,在疊代時返回資料專案。 |
fun <K, V> Map<out K, V>.asSequence(): Sequence<Entry<K, V>> |
它建立一個Sequence 介面範例,它包裝當前對映並在疊代時返回資料專案。 |
operator fun <K, V> Map<out K, V>.iterator(): Iterator<Entry<K, V>> |
它返回Map中資料專案的疊代器。 |
operator fun Map.minus(key: K): Map |
它返回一個Map,其中包含原始Map的所有條目,但提及鍵的資料專案除外。 |
operator fun <K, V> Map<out K, V>.minus(keys: Iterable<K>): Map<K, V> |
它返回一個對映,其中包含原始對映的所有資料專案,除了那些包含在提及鍵集合中的資料專案鍵。 |
operator fun <K, V> Map<out K, V>.minus(keys: Sequence<K>): Map<K, V> |
它返回一個對映,其中包含原始對映的所有資料專案,除了那些包含在給定鍵序列中的資料專案鍵。 |
operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V> |
它通過從給定鍵值對向當前對映新增或替換資料專案來建立新的唯讀對映。 |
operator fun <K, V> Map<out K, V>.plus(pairs: Iterable<Pair<K, V>>): Map<K, V> |
它通過從給定的鍵值對集合中向當前對映新增或替換資料專案來建立新的唯讀對映。 |
operator fun <K, V> Map<out K, V>.plus(pairs: Sequence<Pair<K, V>>): Map<K, V> |
它通過從給定的鍵值對序列向當前對映新增或替換資料專案來建立新的唯讀對映。 |
下面使用mapOf <k,v>()
函式宣告和遍歷Map
值的範例。 在這個例子中,建立Int
型別的鍵和String
型別的值。
fun main(args: Array<String>){
val myMap = mapOf<Int,String>(1 to "Java", 4 to "Kotlin", 3 to "Python")
for(key in myMap.keys){
println(key.toString() +" => "+myMap[key])
}
}
執行上面範例程式碼,得到以下結果 -
1 => Java
4 => Kotlin
3 => Python
更具體地說,可以提供泛型型別Map
,例如myMap:Map <k,v> = mapOf <k,v>()
。
fun main(args: Array<String>){
val myMap: Map<Int, String> = mapOf<Int,String>(1 to "Maxsu", 4 to "Kotlin", 3 to "Java")
for(key in myMap.keys){
println("Element at key $key => ${myMap.get(key)}")
}
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 => Maxsu
Element at key 4 => Kotlin
Element at key 3 => Java
如果不能指定Map
介面的任何型別的鍵和值,那麼它可以採用不同型別的鍵和值。 這是因為所有類內部都使用<Any,Any>
型別。 例如:
fun main(args: Array<String>){
val myMap = mapOf(1 to "Java", 4 to "Python", 3 to "PHP","one" to "Yiibai", "two" to 2)
for(key in myMap.keys){
println("Element at key: '$key' => ${myMap.get(key)}")
}
}
執行上面範例程式碼,得到以下結果 -
Element at key: '1' => Java
Element at key: '4' => Python
Element at key: '3' => PHP
Element at key: 'one' => Yiibai
Element at key: 'two' => 2
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Java", 4 to "Kotlin", 3 to "Python")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println(".....myMap.getValue(4).......")
println(myMap.getValue(4))
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Java
Element at key 4 = Kotlin
Element at key 3 = Python
.....myMap.getValue(4).......
Kotlin
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Yiibai", 4 to "Java", 3 to "Kotlin")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println(".....myMap.contains(3).......")
println( myMap.contains(3))
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Yiibai
Element at key 4 = Java
Element at key 3 = Kotlin
.....myMap.contains(3).......
true
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Yiibai", 4 to "Python", 3 to "Kotlin")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println("......myMap.containsKey(2)......")
println(myMap.containsKey(2))
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Yiibai
Element at key 4 = Python
Element at key 3 = Kotlin
......myMap.containsKey(2)......
false
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Susen", 3 to "Python")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println("......myMap.containsValue(\"Susen\")......")
println(myMap.containsValue("Susen"))
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Maxsu
Element at key 4 = Susen
Element at key 3 = Python
......myMap.containsValue("Susen")......
true
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Python", 3 to "Susen")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println(".....myMap.get(1).......")
println(myMap.get(1))
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Maxsu
Element at key 4 = Python
Element at key 3 = Susen
.....myMap.get(1).......
Maxsu
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Susen", 3 to "Python")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println("......myMap.getOrDefault(3, \"Python\")......")
println(myMap.getOrDefault(36, "Python3"))
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Maxsu
Element at key 4 = Susen
Element at key 3 = Python
......myMap.getOrDefault(3, "Python")......
Python3
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Susen", 3 to "Python")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println(".......myMap.asIterable().....")
for(itr in myMap.asIterable()){
println("key = ${itr.key} value = ${itr.value}")
}
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Maxsu
Element at key 4 = Susen
Element at key 3 = Python
.......myMap.asIterable().....
key = 1 value = Maxsu
key = 4 value = Susen
key = 3 value = Python
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Susen", 3 to "Python")
for(key in myMap.keys){
println("Element at:key $key => ${myMap.get(key)}")
}
println("......myMap.iterator()......")
for(itr1 in myMap.iterator()){
println("key = ${itr1.key}, value = ${itr1.value}")
}
}
執行上面範例程式碼,得到以下結果 -
Element at:key 1 => Maxsu
Element at:key 4 => Susen
Element at:key 3 => Python
......myMap.iterator()......
key = 1, value = Maxsu
key = 4, value = Susen
key = 3, value = Python
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Susen", 3 to "Python")
for(key in myMap.keys){
println("Element at key:$key => ${myMap.get(key)}")
}
println("......myMap.minus(4)......")
for(m in myMap.minus(4)){
println(myMap[m.key])
}
}
執行上面範例程式碼,得到以下結果 -
Element at key:1 => Maxsu
Element at key:4 => Susen
Element at key:3 => Python
......myMap.minus(4)......
Maxsu
Python
fun main(args: Array<String>){
val myMap: Map<Int,String> = mapOf<Int, String>(1 to "Maxsu", 4 to "Susen", 3 to "Python")
for(key in myMap.keys){
println("Element at key $key = ${myMap.get(key)}")
}
println("......myMap.plus(Pair(5, \"Swift\"))......")
for(p in myMap.plus(Pair(5, "Swift"))){
println("Element at key ${p.key} = ${p.value}")
}
}
執行上面範例程式碼,得到以下結果 -
Element at key 1 = Maxsu
Element at key 4 = Susen
Element at key 3 = Python
......myMap.plus(Pair(5, "Swift"))......
Element at key 1 = Maxsu
Element at key 4 = Susen
Element at key 3 = Python
Element at key 5 = Swift