我正在Java的集合框架中寻找一个LIFO结构(Stack),但没有成功。基本上,我想要一个非常简单的堆栈;我的完美选择是一个Deque,但我使用的是Java1.5。
我不想在我的结构中增加另一个类,但我想知道这是否可能:
非常感谢。
编辑:我忘记提到Stack类了:当我看到Stack类实现了Vector时,我对这个类产生了怀疑,而且Vector有点过时了,不是吗?
发布于 2008-11-19 16:24:39
实际上有一个Stack类:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Stack.html
如果您不想使用它,LinkedList类(http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList.html)有addFirst和addLast以及removeFirst和removeLast方法,这使得它非常适合作为堆栈或队列类使用。
发布于 2015-02-28 22:25:09
Deque,ArrayDeque,& LinkedList
虽然这是在不久前被问到的,但是提供一个JDK6+答案可能是明智的,它现在提供了一个由ArrayDeque数据结构实现的德克 (ArrayDeque)接口,并且对LinkedList进行了更新以实现这个接口。
ConcurrentLinkedDeque & LinkedBlockingDeque
并发访问的专用表单也存在,并由ConcurrentLinkedDeque和LinkedBlockingDeque实现。
LIFO与FIFO
deque最重要的一点是,它提供了LIFO (堆栈)和FIFO (队列)支持,它可能会导致混淆哪些方法用于队列操作,哪些方法用于堆栈操作。
JDK应该有一个Stack接口和一个Queue接口,这些接口仍然可以由ArrayDeque这样的人实现,但是只能公开该结构所需的方法子集,即LIFO可以定义pop()、push()和peek(),然后在
LIFO<String> stack = new ArrayDeque<>();只有堆栈操作是公开的,这会阻止某个人意外地调用加(E),而推(E)是有意的。
发布于 2014-01-17 19:25:33
我意识到我在这里的聚会迟到了,但是java.util.Collections (Java7)有一个静态的'asLifoQueue‘,它使用deque参数并返回(显然) Deque的LIFO队列视图。我不知道这是什么版本的。
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#asLifoQueue(java.util.Deque)
https://stackoverflow.com/questions/302460
复制相似问题