用HashMap [Int,Vector [Int]](Scala)表示图形(邻接列表)?

ade*_*rtc 3 scala graph vector adjacency-list

我想知道如何(如果可能的话)我可以通过制作(可变)图形的邻接列表表示HashMap[Int, Vector[Int]].HashMap当然是可变的.

目前我把它设置为HashMap[Int, ArrayBuffer[Int]],但事实上我可以改变ArrayBuffer中的每个单元格让我感到不舒服,即使我很确定我不是那样做的.我会使用a ListBuffer[Int]但我希望快速随机访问邻居,因为我需要在图上进行快速随机游走.A Vector[Int]会解决这个问题,但无论如何都要这样做吗?

据我所知(在REPL中尝试过),这不起作用:

scala> val x = new mutable.HashMap[Int, Vector[Int]]
x: scala.collection.mutable.HashMap[Int,Vector[Int]] = Map()

scala> x(3) = Vector(1)

scala> x(3) += 4 // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)

我需要能够随时附加到它并随机访问其中的任何元素(给定索引).这可能吗?

谢谢!-kstruct

Lui*_*hys 5

使用Vector:

x += 3 -> (x(3) :+ 4)  //x.type = Map(3 -> Vector(1, 4))
Run Code Online (Sandbox Code Playgroud)

您可能会注意到,如果没有现有密钥,这将失败,因此您可能希望将地图设置为

val x = new mutable.HashMap[Int, Vector[Int]] withDefaultValue Vector.empty
Run Code Online (Sandbox Code Playgroud)