Java和不同类型的堆栈

时间:2010-06-15 17:25:37

标签: java data-structures vector stack

目前我唯一知道的堆栈是Vector,我通常使用它来代替数组,但我知道还有其他类型的堆栈,它们都适合不同的工作。

我目前正在处理的项目要求我将对象插入堆栈内的某个位置,而不是总是在堆栈的前面,而且我认为Vector可能不是这项工作的最佳类。

有人可以给我一个关于Java语言可用的其他类型堆栈的简要描述及其优缺点吗?这些名字是否同质?例如。它们仅用于Java语言还是用作计算机科学中的通用术语?

谢谢

4 个答案:

答案 0 :(得分:3)

您提到您正在将内容插入“堆栈”中间。然后我建议使用LinkedList

如果您已经找到了输入新元素所需的位置,则插入它的时间为O(1)。对于向量,它是O(n),因为您需要复制支持数组。

LinkedList还支持类似堆栈的操作,例如添加到结尾,或弹出堆栈的末尾。

查看数据结构的javadocs,了解它的全部内容。

回答你的上一个问题。 LinkedList是整个计算机科学中非常常见的数据结构。它也非常常用于实现堆栈,因为推送和弹出操作是恒定的时间O(1)

答案 1 :(得分:3)

  • 堆栈是一种以LIFO行为或推/弹操作为特征的抽象数据类型
  • 列表是一种抽象数据类型,其特点是可通过数字索引访问其元素。
  • 数组是列表的低级实现
  • java.util.List 是表示为Java接口的列表类型
  • java.util.Deque 是一个Java接口,它提供LIFO和FIFO队列行为(因此堆栈行为作为子集)
  • java.util.Vector 是一个不再使用的列表(基于自动调整大小数组)的过时实现
  • java.util.ArrayList 是其现代化的替代品
  • java.util.Stack 是一个过时的堆栈实现,包括向Vector添加一些类似堆栈的方法,这不是一个好方法。
  • java.util.ArrayDeque 是Deque界面的现代实现
  • java.util.LinkedList 是列表的不同实现(也实现了Deque接口),它有许多大的缺点,只能在非常特殊的情况下使用(它更好)当您需要经常插入或删除列表中的元素时。)

基本上,如果你想要一个堆栈,可以使用Deque接口和ArrayDeque作为实现类(除了LinkedList更好的极少数情况除外)。如果您需要列表,请使用ArrayList

答案 2 :(得分:1)

我建议看一下this tutorial on the Java Collections Framework,它引用java.util包中的所有主要数据类型,你将用于这样的事情(列表,向量,地图,树等)

答案 3 :(得分:1)

java.util.Stack的API文档建议您使用接口java.util.Deque的其中一个实现,例如java.util.ArrayDequejava.util.LinkedList

LinkedList可以有效地在中间插入元素并从头部或尾部移除元素(但查找随机元素效率不高)。