【发布时间】:2019-10-17 09:12:36
【问题描述】:
我使用 Stack 和 StringBuilder 类编写了一个字符串反转代码。而且我注意到此代码中的“foreach”循环会生成 java.util.ConcurrentModificationException,但通常的“for”循环不会。那为什么呢?
public static String reverse(String str)
{
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++)
stack.push(str.toCharArray()[i]);
}
for (Character c: stack) // generates an exception
{
sb.append(stack.pop());
}
return sb.toString();
}
我期望一个反转的字符串,但发生了 ConcurrentModificationException。
【问题讨论】:
-
这
stack.push(str.toCharArray()[i]);不会像stack.push(str.charAt(i));和while(!st.isEmpty()) { sb.append(stack.pop());}一样吗? -
stack.pop() 修改栈,不允许改变foreach中的集合
标签: java