我有一个类(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());
}
}
}
我在迭代它时没有修改堆栈,所以我不明白为什么抛出异常。
你的问题是当你得到迭代器。您正在创建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。变量名都应以较低的字母开头,而类名以大写字母开头。学习这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。