收集地图的不可靠性

时间:2018-05-04 17:30:29

标签: scala-collections

在SCALA的不可变集合中,当集合的长度发生变化时,会创建一个新对象让我们假设我创建了一个不可变的Map,然后执行连接。 CODE =>

object Dcoder extends App
{
    var map=Map("abc"-> 1,"xyz"->2)
    var change =map++Map("change of object"+>3)
}

现在我的问题是 a)新对象是否因为++ ??而被创建 b)由于我使用了IMMUTABLE COLLECTION并且Immutable集合的长度发生了变化,因此创建了新对象??

2 个答案:

答案 0 :(得分:1)

来自++ immutable.Map.++的文档:

Adds a number of elements provided by a traversable object and returns a new collection with the added elements. 

确实,它会创建一个新的集合,保留旧的map未经修改的:

scala> var map = Map("abc" -> 1, "xyz" -> 2)
map: scala.collection.immutable.Map[String,Int] = Map(abc -> 1, xyz -> 2)

scala> var change = map ++ Map("change of object" -> 3)
change: scala.collection.immutable.Map[String,Int] = Map(abc -> 1, xyz -> 2, change of object -> 3)

scala> change
res9: scala.collection.immutable.Map[String,Int] = Map(abc -> 1, xyz -> 2, change of object -> 3)

scala> map
res10: scala.collection.immutable.Map[String,Int] = Map(abc -> 1, xyz -> 2)

您可以使用+=来修改"您的map同样:

scala> map += "lol" -> 3

scala> map
res12: scala.collection.immutable.Map[String,Int] = Map(abc -> 1, xyz -> 2, lol -> 3)

意识到我只是将"修改",因为这会返回另一个map(因为它是不可变的)对象并将其分配给您的map变量。

答案 1 :(得分:1)

对这两个问题都是肯定的。事实上,根据scala docs

ms ++ kvs

创建包含ms的所有映射以及kvs的所有键/值对的映射。

更多信息here