【发布时间】:2019-09-02 18:09:44
【问题描述】:
我有一个 mutable.LinkedHashMap 并尝试在 for 循环中删除项目。但是,如果发生 remove,for 循环也会停止。
scala> val a = mutable.LinkedHashMap[Int, Int](1->1, 2->2, 3->3)
# when no remove occurs, for-loop works as expected
scala> for( (k,v) <- a ) { println(k); }
1
2
3
# following code doesn't work, only remove 1 and stop
scala> for( (k,v) <- a ) { println(k); a.remove(k) }
1
# following code work as expected
scala> a.keys.foreach{ k => println(k); a.remove(k) }
1
2
3
我很好奇为什么要删除 stop for-loop。
【问题讨论】:
-
在迭代时更新集合会使迭代器失效。在最后一种情况下,您正在迭代
a.keys返回的集合,以便按预期工作。
标签: scala linkedhashmap