У меня есть этот пример, который использует изменчивый HashMap.withDefaultValue
. withDefaultValues
предоставляет способ вернуть значение, даже если ключ не существует, но он не должен изменять коллекцию. в любом случае, существует противоречивое поведение, так как map.size
возвращает 0, и в то же время map(key)
возвращает значение.scala mutable Map withDefaultValue странное поведение
как это возможно?
import scala.collection.mutable
val map = mutable.HashMap[String, mutable.Map[Int, String]]()
.withDefaultValue(mutable.HashMap[Int, String]())
map("id1")(2) = "three"
println(map.size) // 0 (expected)
println(map) // Map() (expected)
println(map("id1")) // Map(2 -> three) (unexpected)
println(map("id1")(2)) // three (unexpected)
Как это неожиданно? 'map (" id1 ")' использует значение по умолчанию, которое вы указали. –
Вам действительно нужна изменчивая «Карта»? Я бы рекомендовал неизменяемую карту или «TrieMap», если вам нужна изменчивость в параллельном контексте. – Reactormonk
Я предоставил пустое значение по умолчанию (аргумент withDefaultValue). –