我有一个类(myObject),它具有自己的toString()方法。然后,我制作了另一个名为myStack的类,它扩展了Stack。该类应该是myObject对象的堆栈。
当我尝试使用迭代器遍历堆栈以打印每个对象时,它将引发ConcurrentModificationException。
这是我的代码:
public class myStack extends Stack<myObject> {
Iterator<myObject> iter = this.iterator();
public void printStack(){
while(iter.hasNext()){
myObject temp = iter.next();
System.out.print(temp.toString());
}
}
}
在迭代堆栈时,我没有修改堆栈,所以我不明白为什么会引发异常。
答案 0 :(得分:3)
您的问题是何时得到迭代器。您是在创建myStack对象时获得它的(请将该类重命名为MyStack
),然后然后修改堆栈,然后使用迭代器,由于您正在使用它,因此不会运行修改堆栈后的迭代器。相反,您需要在使用之前在printStack()
方法顶部提取迭代器,以便它是一个有效且稳定的迭代器,该迭代器表示当时堆栈状态。
public class MyStack extends Stack<myObject> {
public void printStack() {
Iterator<myObject> iter = this.iterator(); // *** here***
while(iter.hasNext()) {
myObject temp = iter.next();
System.out.print(temp.toString());
}
}
顺便说一句,您将要学习和使用Java naming conventions。变量名都应以小写字母开头,而类名应以大写字母开头。学习并遵循此规则将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。