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

时间:2012-04-27 21:44:34

标签: scala graph vector adjacency-list

我想知道如何(如果可能的话)我可以通过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

1 个答案:

答案 0 :(得分:5)

使用Vector:

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

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

val x = new mutable.HashMap[Int, Vector[Int]] withDefaultValue Vector.empty