我将如何在 Java 中迭代堆栈 [关闭]
Posted
技术标签:
【中文标题】我将如何在 Java 中迭代堆栈 [关闭]【英文标题】:How would I iterate a stack in Java [closed] 【发布时间】:2012-10-09 01:22:15 【问题描述】:我想知道如何在 Stack 类中使用迭代器。如何为它创建一个迭代器类?
【问题讨论】:
公共迭代器只需通过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);
【讨论】:
没有迭代器 - while (!stack.isEmpty()) ... currentSymbol = stack.pop();... @HiteshSahu 运行代码后,Stack
将为空,因为pop()
删除了堆栈的顶部。
同意。我正在构建一个编译器,我正在使用这个变体进行语法解析。
栈迭代器有一个bug,这种方法不返回LIFO顺序。 ***.com/questions/16992758/…【参考方案2】:
Stack<Object> myStack; // obtain your Stack object
Iterator iterator = myStack.iterator();
while (iterator.hasNext())
Object object = iterator.next();
【讨论】:
也请写一些解释,这段代码是做什么的。【参考方案3】:你可以这样做:
for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();)
MyObject myObject = iterator.next();
myObject.doStuff();
【讨论】:
【参考方案4】:听起来您实现了一个自定义堆栈类。您的“某物”应实现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
【讨论】:
【参考方案5】: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
接口。然后你可以做一些类似其他答案的事情。
【讨论】:
以上是关于我将如何在 Java 中迭代堆栈 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
[如何在C ++中仅使用迭代器来正确地迭代3D向量? [关闭]