Неизменность коллекции Карта - PullRequest
0 голосов
/ 04 мая 2018

В неизменяемой коллекции SCALA при изменении длины коллекции создается новый объект. Предположим, я создаю неизменную карту, а затем выполняю конкатенацию. CODE =>

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

Теперь мой вопрос
а) Создается ли новый объект из-за ++ ??
б) Поскольку я использую НЕМЕРТНУЮ КОЛЛЕКЦИЮ, а длина Неизменяемой коллекции изменилась, поэтому создается новый объект ??

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Да на оба вопроса. Фактически, согласно scala docs :

ms ++ kvs

создает карту, содержащую все отображения мс, а также все пары ключ / значение kvs.

Дополнительная информация здесь .

0 голосов
/ 04 мая 2018

Из документации ++ неизменяемый. Карта. ++ :

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 переменной.

...