在Scala中初始化数据结构

时间:2016-06-20 10:15:28

标签: scala

我试图初始化这个数据结构:

  var array:ArrayBuffer[Map[Int,Int]] = ArrayBuffer()

  for ( i <- 0 to 10) {
    array(i) = Map()
  }

但我正在

Exception in thread "main" java.lang.IndexOutOfBoundsException: 0

出了什么问题?

2 个答案:

答案 0 :(得分:5)

您的ArrayBuffer为空,因此您无法将索引i的元素设置为新Map - 如果{{1},则i不是有效索引}} 是空的。请改用:

ArrayBuffer

或者这个:

for (i <- 0 to 10) {
  array += Map()
}

答案 1 :(得分:2)

在Scala中,无论何时使用可变数据结构(如ArrayBuffer),您都应该问自己是否确实需要它。 如果你确实需要它,那么可变结构不应该离开方法的范围,因此它不会暴露给程序的其他部分,因为这可能会导致并发问题。

Scala的好处是默认情况下它使用不可变的数据结构。

我宁愿使用它来创建一个带有地图的可遍历结构,而不是使用ArrayBuffer:

for {
  i <- 0 to 10
} yield Map.empty[Int, Int]

这将返回一个Vector [Map [Int,Int]],它仍可用于访问特定索引处的元素,就像数组一样,Vector有一个'update'方法来更新特定索引处的元素,但是...它返回一个新的不可变Vector!