如何调用堆栈中所有对象的toString()方法?

时间:2019-03-10 03:55:20

标签: java data-structures stack concurrentmodification

我有一个类(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());

        }

    }

} 

在迭代堆栈时,我没有修改堆栈,所以我不明白为什么会引发异常。

1 个答案:

答案 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。变量名都应以小写字母开头,而类名应以大写字母开头。学习并遵循此规则将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。

相关问题