据我了解,filterKeysMapLike方法在原始 map 上创建了一个包装器。因此,如果我执行以下代码,m将是10K包装程序和原始 map 的链。

var m = Map(1->“一个”,2->“两个”)
for(1
现在,我认为对m.contains的调用导致了堆栈溢出,但是没有发生。您能解释一下这种情况吗?

最佳答案

如果我逐字复制,则循环仅执行1次。因此,您只创建了一个包装器,所以原本打算由10000个包装器组成的链只是一个1链。这可能是一个错字,但是循环,

for(1 <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}

应该是
for(i <- 0 until 10000) {m = m.filterKeys(_%2 == 0)}

除此之外,丹尼尔是对的。 fitlerKeys确实产生本质上是包装器的东西。我花了超过1万次迭代,但是我确实设法创建了StackOverflowError。

关于scala - filterKeys会导致堆栈溢出吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9081051/

10-11 19:21