首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java集合(LIFO结构)

Java集合(LIFO结构)
EN

Stack Overflow用户
提问于 2008-11-19 16:21:51
回答 6查看 107.9K关注 0票数 42

我正在Java的集合框架中寻找一个LIFO结构(Stack),但没有成功。基本上,我想要一个非常简单的堆栈;我的完美选择是一个Deque,但我使用的是Java1.5。

我不想在我的结构中增加另一个类,但我想知道这是否可能:

  1. 集合框架(1.5)中是否有执行此工作的类?
  2. 如果没有,是否有任何方法可以在LIFO队列(也称为堆栈)中切换队列,而无需重新实现?
  3. 如果没有,我应该为这个任务扩展哪个接口或类?我想,保持太阳与德克的方式是一个好的开始。

非常感谢。

编辑:我忘记提到Stack类了:当我看到Stack类实现了Vector时,我对这个类产生了怀疑,而且Vector有点过时了,不是吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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)有addFirstaddLast以及removeFirstremoveLast方法,这使得它非常适合作为堆栈或队列类使用。

票数 60
EN

Stack Overflow用户

发布于 2015-02-28 22:25:09

DequeArrayDeque,& LinkedList

虽然这是在不久前被问到的,但是提供一个JDK6+答案可能是明智的,它现在提供了一个由ArrayDeque数据结构实现的德克 (ArrayDeque)接口,并且对LinkedList进行了更新以实现这个接口。

ConcurrentLinkedDeque & LinkedBlockingDeque

并发访问的专用表单也存在,并由ConcurrentLinkedDequeLinkedBlockingDeque实现。

LIFO与FIFO

deque最重要的一点是,它提供了LIFO (堆栈)和FIFO (队列)支持,它可能会导致混淆哪些方法用于队列操作,哪些方法用于堆栈操作。

JDK应该有一个Stack接口和一个Queue接口,这些接口仍然可以由ArrayDeque这样的人实现,但是只能公开该结构所需的方法子集,即LIFO可以定义pop()push()peek(),然后在

代码语言:javascript
复制
LIFO<String> stack = new ArrayDeque<>();

只有堆栈操作是公开的,这会阻止某个人意外地调用加(E),而推(E)是有意的。

票数 12
EN

Stack Overflow用户

发布于 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)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/302460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档