回答

收藏

Kotlin中不会使用Map闹出的笑话

Kotlin Kotlin 23243 人阅读 | 0 人回复 | 2020-10-21

# Kotlin中Map的使用方法
本以为可以从Java无缝衔接到kotlin中去,但是在使用Map的时候出现了问题:我根本不会使用Kotlin中的Map。所以开始简单的学习一下,会用就行。

## Java版的HashMap用法:
```Java
public static void main(String[] args) {
    Map<Integer,String> map = new HashMap<>();
    map.put(1,"A");
    map.put(2,"B");
    map.put(3,"C");
    map.put(4,"D");
    map.forEach((k,v)->{
        System.out.println("key:" + k + " value: " + v);
    });
}
```
输出结果:
> key:1 value: A
key:2 value: B
key:3 value: C
key:4 value: D

用Java来写,已经是非常简单了,我们首先实例化了一个名为map的HashMap对象,随后往map里添加了4个键值对,最后遍历输出,没有任何问题,所以我开始在kotlin中也这样用。

## Kolin中的Map:(正确的)
```Kotlin
fun main() {
    var map = hashMapOf<Int, String>()
    map.put(1, "A")
    map.put(2, "B")
    map.put(3, "C")
    map.put(4, "D")
    map.forEach {
        println("key:" + it.key + " value: " + it.value)
    }
}
```
输出结果:
> key:1 value: A
key:2 value: B
key:3 value: C
key:4 value: D

目前来看是没有任何问题,这是因为我在写这篇文章的时候发现了kotlin中的hashMapOf,最开始的时候我是直接敲入var map = map的,随后就提示出了mapof,所以我就直接开始用了,最后的代码是这样的:
```Koltin
fun main(){
    var map = mapOf<Int, String>()
    map.plus(1 to "A")
    map.plus(2 to "B")
    map.plus(3 to "C")
    map.plus(4 to "D")
    map.forEach {
        println("key:" + it.key + " value: " + it.value)
    }
}
```
没有任何的输出,这就让我感到很疑惑,不应该啊,后来我就想这个会不会是没有赋值导致的,于是改良版的代码出现了:
```Koltin
fun main(){
    var map = mapOf<Int, String>()
    map = map.plus(1 to "A")
    map = map.plus(2 to "B")
    map = map.plus(3 to "C")
    map = map.plus(4 to "D")
    map.forEach {
        println("key:" + it.key + " value: " + it.value)
    }
}
```
这次有结果了,输出结果:
> key:1 value: A
key:2 value: B
key:3 value: C
key:4 value: D

为什么需要这一步赋值操作呢?


## 探究mapOf
我看了一下注释,是这样的:
```Koltin
/**
* Returns an empty read-only map.
*
* The returned map is serializable (JVM).
* @sample samples.collections.Maps.Instantiation.emptyReadOnlyMap
*/
@kotlin.internal.InlineOnly
public inline fun <K, V> mapOf(): Map<K, V> = emptyMap()
```
当我看到这个**read-only map**关键字的时候,我就知道,我像个憨憨一样,这也说明了学习的重要性,什么都不看,就按照自己的想法写代码是错误的。


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则