Zastanawiam się, jak korzystać z iteratora w klasie stosu. Jak utworzyć dla niego klasę iteratora?Jak iterować stos w Javie
Odpowiedz
Wystarczy dostać Iterator
poprzez iterator()
:
Stack<YourObject> stack = ...
Iterator<YourObject> iter = stack.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
Lub alternatywnie, jeśli chcesz po prostu je wszystkie wydrukować użyć enhanced-for loop:
for(YourObject obj : stack)
{
System.out.println(obj);
}
Bez iterator - podczas {... currentSymbol = stack.pop(); ...} –
@HiteshSahu Po biegania (stack.isEmpty()!) Twój kod, 'Stack' będzie pusty, ponieważ' pop() 'usuwa górę stosu. – Baz
Zgadzam się. Budowałem kompilator i używałem tej odmiany do parsowania syntexów. –
Stack<Object> myStack; // obtain your Stack object
Iterator iterator = myStack.iterator();
while (iterator.hasNext()) {
Object object = iterator.next();
}
Proszę również napisać wyjaśnienie, co robi ten kod. – Lucifer
Można zrobić:
for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
MyObject myObject = iterator.next();
myObject.doStuff();
}
Wygląda na to, że zaimplementowano niestandardową klasę stosu. Twoje "coś" powinno implementować interfejs Iterable
i zapewniać implementację 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
}
}
}
I am working on something that is implementing a stack using queues
Czy to znaczy, że nie używasz Stack
implementację Javy? http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html Jest on oparty na Vector nie kolejek.
Jeśli używasz implementacji Java Stack
, możesz używać iteratora, tak jak w przypadku innych odpowiedzi. W przeciwnym razie, jeśli jest to niestandardowe Stack
, musisz zaimplementować interfejs Iterable
. A potem możesz zrobić coś podobnego do innych odpowiedzi.
Iterator publicznego iterator() { \t \t \t} –