我试图初始化这个数据结构:
var array:ArrayBuffer[Map[Int,Int]] = ArrayBuffer()
for ( i <- 0 to 10) {
array(i) = Map()
}
但我正在
Exception in thread "main" java.lang.IndexOutOfBoundsException: 0
出了什么问题?
答案 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!