Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MutableMap和Kotlin中的Map有什么不同?_Kotlin - Fatal编程技术网

MutableMap和Kotlin中的Map有什么不同?

MutableMap和Kotlin中的Map有什么不同?,kotlin,Kotlin,我不明白可变地图和Kotlin地图有什么不同 以下代码来自上的一个示例 我不知道为什么val映射被设计为可变映射,我认为它应该是映射,因为它是数据库表的字段 你能告诉我为什么var映射被设计成可变映射吗 class CityForecast(val map: MutableMap<String, Any?>, val dailyForecast: List<DayForecast>) { var _id: Long by map var city: Str

我不明白可变地图和Kotlin地图有什么不同

以下代码来自上的一个示例

我不知道为什么val映射被设计为可变映射,我认为它应该是映射,因为它是数据库表的字段

你能告诉我为什么var映射被设计成可变映射吗

class CityForecast(val map: MutableMap<String, Any?>, val dailyForecast: List<DayForecast>) {
    var _id: Long by map
    var city: String by map
    var country: String by map

    constructor(id: Long, city: String, country: String, dailyForecast: List<DayForecast>)
            : this(HashMap(), dailyForecast) {
        this._id = id
        this.city = city
        this.country = country
    }
}
class CityForecast(val地图:可变地图,val每日预测:列表){
var\u id:Long by map
var城市:按地图排列
var国家/地区:按地图字符串
构造函数(id:Long,城市:String,国家:String,dailyForecast:List)
:此(HashMap(),dailyForecast){
这个.\u id=id
这个城市
这个国家
}
}

地图
为只读<代码>可变映射是可变的。因为
var
可以写入一个新值,所以它必须是一个可变变量作为委托属性。如果您只在
val
上使用委托属性,您可以使用
映射来代替。

我看到您的混淆-
val
var
定义指针的可变性-即
val
始终指向内存中的同一对象-但它没有说明该对象是否可以更改其属性。 var声明变量可以更改/指向不同的对象

当您这样声明地图时:

val cities = mutableMapOf(1 to "Paris", 4 to "Rome", 2 to "Viena", 3 to "Barcelona")  
if (code == "US") 
    myCities = citiesUS 
else 
    myCities = citiesEU
然后您可以在这个映射中添加或删除元素,因为它是可变的。但不能更改指向其他集合的指针

如果您有两张代表欧洲城市和美国城市的地图,请参见下图:

val citiesEu = mutableMapOf (1 to "Paris", 4 to "Rome", 2 to "Viena", 3 to "Barcelona")  

val citiesUS = mutableMapOf(1 to "New York", 4 to "L.A.", 2 to "Dallas", 3 to "Washington")

val myCities = mutableMapOf<Int, String>() 
由于val(无法重新分配),您将无法执行此操作,您需要将其更改为:
varmyCities=mutableMapOf()

MutableMap
Map
的可变版本,因此如果使用
MutableMap
可以修改、更改元素值等

例如:

  • 向元素添加新值
  • 将新的
    对添加到地图
  • 从映射中删除元素

  • 如果使用不可变的map版本,即
    map

    ,则无法执行这些操作。在定义map时,是否必须首先为map赋值?我不能通过构造函数给地图赋值,对吗?@HelloCW看到了可能的副本
    val person = mutableMapOf("Kelvin" to 19)
    person["Kelvin"] = 25
    println(person) // {Kelvin=25}
    
    person["angel"] = 17
    println(person) // {Kelvin=25, angel=17}
    
    person.remove("Kelvin")
    println(person) // {angel=17}