19

Stack クラスでイテレータを使用する方法を考えています。そのための反復子クラスを作成するにはどうすればよいですか?

4

5 に答える 5

22

Iteratorビアを取得するだけですiterator()

Stack<YourObject> stack = ...

Iterator<YourObject> iter = stack.iterator();

while (iter.hasNext()){
    System.out.println(iter.next());
}

または、それらすべてを印刷したいだけの場合は、拡張 for ループを使用します。

for(YourObject obj : stack)
{
    System.out.println(obj);
}
于 2012-10-18T14:36:41.043 に答える
4

あなたがすることができます:

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
   MyObject myObject = iterator.next();
   myObject.doStuff();
}
于 2012-10-18T14:39:59.843 に答える
1

カスタムスタッククラスを実装したようです。あなたの「何か」はIterableインターフェースを実装し、の実装を提供する必要がありますIterator

public class MySomethingThatIsAStack<T> implements Iterable<T> {

   @Override
   public Iterator<T> iterator() {
     return new Iterator<T>() {
         // your implementation of the iterator, namely the
         // methods hasNext, next and remove
     }
   }
}
于 2012-10-18T14:44:31.347 に答える
1
Stack<Object> myStack; // obtain your Stack object

Iterator iterator = myStack.iterator();
while (iterator.hasNext()) {
   Object object = iterator.next();
}
于 2012-10-18T14:39:19.597 に答える
0

I am working on something that is implementing a stack using queues

Stackそれは、Java実装 を使用していないということですか? http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html キューではなくベクトルに基づいています。

StackJava実装を使用している場合は、他の回答と同様に反復子を使用できます。それ以外の場合、それが custom の場合Stackは、インターフェースを実装する必要がありIterableます。そして、他の答えのようなことをすることができます。

于 2012-10-18T14:45:00.357 に答える