Java 和不同类型的堆栈

Rar*_*rge 4 java stack vector data-structures

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

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

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

谢谢

Mic*_*rdt 6

  • 堆栈是一个抽象的数据类型,其特征在于LIFO行为或推/弹出操作
  • 列表是一个抽象的数据类型,其特征在于具有通过数字索引可访问的其elemets。
  • 一个数组是一个列表的低级实现
  • 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