web-dev-qa-db-ja.com

Javaでスタックを反復する方法

Stackクラスでイテレータを使用する方法を知りたいです。そのための反復子クラスをどのように作成しますか?

15
Ervin Lucci

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

Stack<YourObject> stack = ...

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

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

または、単にそれらを印刷したい場合は、 enhanced-for loop を使用します。

for(YourObject obj : stack)
{
    System.out.println(obj);
}
18
Baz

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

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
   MyObject myObject = iterator.next();
   myObject.doStuff();
}
4
Reimeus
Stack<Object> myStack; // obtain your Stack object

Iterator iterator = myStack.iterator();
while (iterator.hasNext()) {
   Object object = iterator.next();
}
1
Pavel Savinov

カスタムスタッククラスを実装したようですね。 「何か」は、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
     }
   }
}
1
Andreas_D

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

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

Java Stackの実装を使用している場合は、他の回答のようにイテレータを使用できます。それ以外の場合、それがカスタムのStackの場合は、Iterableインターフェースを実装する必要があります。次に、他のようなことを行うことができます答えます。

0
evanwong