kotlin映射中的plus()和put()方法有什么区别?

kotlin映射中的plus()和put()方法有什么区别?,kotlin,Kotlin,kotlin映射中的plus()和put()方法有什么区别 我已经创建了映射并使用plus()方法添加键值对,但是当我打印映射时,我找不到添加的值。然后我移动到put()。plus()方法的行为是什么?如中所述,plus方法(通常以运算符形式使用,+)返回一个新映射,其中包含原始映射中的元素以及作为参数传递给它的键/值对。它不会修改调用它的映射 向Kotlin映射添加值的惯用方法不是使用put方法,而是使用方括号: map[key] = value 常规的Map(不可变)只能使用plus函数(

kotlin映射中的plus()和put()方法有什么区别

我已经创建了映射并使用plus()方法添加键值对,但是当我打印映射时,我找不到添加的值。然后我移动到put()。plus()方法的行为是什么?

如中所述,
plus
方法(通常以运算符形式使用,
+
)返回一个新映射,其中包含原始映射中的元素以及作为参数传递给它的键/值对。它不会修改调用它的映射

向Kotlin映射添加值的惯用方法不是使用
put
方法,而是使用方括号:

map[key] = value

常规的
Map
(不可变)只能使用
plus
函数(也可以使用+运算符调用)进行修改

plus
操作符处理成对的值,并且本质上不修改原始映射;它返回一个带有新条目的新映射

// mapA and mapB are different maps
val mapA = mapOf("a" to 1, "b" to 2)
val mapB = mapA + ("c" to 3)
使用
MutableMap
时,除了
plus
(仍将返回新映射)之外,还有几个选项可以更改映射的内容:
put
set
(这是[]运算符)和
plusAssign
(这是+=运算符)

作为函数调用,
set
put
之间的区别在于
put
返回键的上一个值(或null),而
set
不返回任何内容。此外,在使用括号语法时,不能将其用作函数的表达式体。在创建包装类以访问映射内的数据时,它特别有用:

class SomeWrapper(private val backingMap: MutableMap<String, String?>) {

    var someIntValue: Int?
        get() = backingMap["someInt"]?.toIntOrNull() 
        set(value) = backingMap.set("someInt", value.toString())

        // this is invalid because assignments are not expressions
        // set(value) = backingMap["someInt"] = value

        // this is also invalid because put would return String? instead of Unit
        // set(value) = backingMap.put("someInt", value)

}

Well+通常不会修改其操作数。
val map = mutableMapOf("a" to 1, "b" to 2)
map += ("c" to 3)