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

3
我想知道如何(如果可能的话)通过 HashMap[Int, Vector[Int]] 来创建一个(可变的)图的邻接列表表示。当然,HashMap 是可变的。
目前我将其设置为 HashMap[Int, ArrayBuffer[Int]],但是我可以更改 ArrayBuffer 中的每个单元格这一事实让我感到不舒服,尽管我相当确定我没有这样做。我想使用 ListBuffer[Int],但是由于需要在图上进行快速随机游走,因此我需要快速访问邻居。 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

我需要能够随时将内容添加到其中,并且可以随机访问其中的任何元素(给定索引)。这是否可行?

谢谢! -kstruct


你了解scala-graph吗?http://www.assembla.com/spaces/scala-graph/wiki - Jens Schauder
是的 - 这个项目主要是让我更熟悉Scala,并且对于我使用它的目的,我只需要一个基本的图形类,没有太多花哨的东西。 - adelbertc
1个回答

5

使用向量:

x += 3 -> (x(3) :+ 4)  //x.type = Map(3 -> Vector(1, 4))

你可能会注意到,如果没有现有的键,这将失败,因此你可能希望将地图设置为:
val x = new mutable.HashMap[Int, Vector[Int]] withDefaultValue Vector.empty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接