我是scala的新手。下面的例子我有點困惑發生了什麼事情。我創建了一個可變的地圖,然後將三個鍵/值推入地圖。我可以通過鍵值檢索隊列,但「web.keys」顯示地圖是空的,「web.size」返回0!爲什麼是這樣,以及我如何檢索正確的地圖大小?scala - 爲什麼map.size在地圖不爲空時返回0
scala> import scala.collection.mutable.{Map, Set, Queue, ArrayBuffer}
scala> val web = Map[Int, Queue[Long]]().withDefaultValue(Queue())
web: scala.collection.mutable.Map[Int,scala.collection.mutable.Queue[Long]] = Map()
scala> web(123).enqueue(567L)
scala> web(123).enqueue(1L)
scala> web(123).enqueue(2L)
scala> web(123)
res96: scala.collection.mutable.Queue[Long] = Queue(567, 1, 2)
scala> web
res97: scala.collection.mutable.Map[Int,scala.collection.mutable.Queue[Long]] = Map()
scala> web.size
res98: Int = 0
scala> web.keys
res99: Iterable[Int] = Set()
一個簡單的地圖工作正常。
scala> val w= Map[Int,Int]()
w: scala.collection.mutable.Map[Int,Int] = Map()
scala> w(1)=1
scala> w
res10: scala.collection.mutable.Map[Int,Int] = Map(1 -> 1)
scala> w(2)=2
scala> w
res12: scala.collection.mutable.Map[Int,Int] = Map(2 -> 2, 1 -> 1)
scala> w.size
res13: Int = 2
我想更多的實驗,似乎它是與「withDefaultValue」。但是,我該如何解決它?
scala> val ww= Map[Int,Int]().withDefaultValue(0)
ww: scala.collection.mutable.Map[Int,Int] = Map()
scala> ww
res14: scala.collection.mutable.Map[Int,Int] = Map()
scala> ww(1) += 1
scala> ww(2) += 2
scala> w.size
res17: Int = 0
可能的重複[爲什麼我的地圖聲明在添加密鑰後沒有密鑰?](https://stackoverflow.com/questions/44532916/why-does-my-map-claim-to-have-no- keys-after-adding-keys)或[withDefaultValue在mutable.Map中的行爲](https://stackoverflow.com/q/46650121/1048572) – Bergi