Java 为什么使用堆栈数据结构来存储基本值而不是链表或数组?

Java 为什么使用堆栈数据结构来存储基本值而不是链表或数组?,java,memory,memory-management,data-structures,stack,Java,Memory,Memory Management,Data Structures,Stack,既然栈在内部使用链表/数组,为什么java不直接在链表/数组而不是栈中存储基元值呢 我认为这是一个很好的问题。 让我从java.util.Stack开始,它扩展了Vector,并有一些方法在内部调用Vector类中定义的方法。(例如:removeElementAt(..),addElement(..)等等 >代码>向量实现涉及“数组< /代码>”,如你所说的(如果你考虑 JDK < /Cord>版本) 基本上,java.util.Stack是基于LIFO的原理工作的,这使得它成为一个奇妙的数据

既然栈在内部使用链表/数组,为什么java不直接在链表/数组而不是栈中存储基元值呢

我认为这是一个很好的问题。 让我从
java.util.Stack
开始,它扩展了
Vector
,并有一些方法在内部调用
Vector
类中定义的方法。(例如:
removeElementAt(..)
addElement(..)
等等

<> >代码>向量实现涉及“<代码>数组< /代码>”,如你所说的(如果你考虑<代码> JDK < /Cord>版本)

基本上,
java.util.Stack
是基于LIFO的原理工作的,这使得它成为一个奇妙的
数据结构(使用简单的
推送
弹出

现在回到您的问题,为什么java不将数组用于
堆栈内存
。让我简要介绍一下堆栈内存

堆栈内存
包含特定于方法的短期值,以及对
中从
线程所用方法引用的其他对象的引用

如果你考虑你的程序流,那么大的<代码>()会首先被调用,随后的所有嵌套的方法调用都会被它所遵循。因此,如果你只考虑程序流中的<>代码堆栈内存< /代码>中的方法:<>代码>堆栈应该是什么样子:

main() <----- 1st call

method1() 
main() <------ 2nd call

method2()
method1() 
main()  <------ 3rd call

main()关键问题是泛型是一种编译时功能,泛型的所有实现都使用相同的代码,它们都是
list。恐怕你问的问题真的不清楚。我怀疑你可能混淆了“堆栈”(与堆相比是一个内存区域)和“java.util.stack”(一个java集合类)@JonSkeet:但两者都是相同的,对吗?两者都是FILO。任何类型的
堆栈
都是基于
LIFO
。堆栈都有一些策略用于
push
pop
操作,以保证堆栈是
LIFO
。在许多情况下,比如解析和计算带有括号的数学语句,堆栈非常有用ful,因为您不需要担心推送和弹出业务的方式。您提到的
FILO
先进先出与
LIFO
先进先出相同,但更常见的是
LIFO
。如果您将
推送和
Pop
操作保留在代码中,并使用类似于
List
的操作相反,你应该在你的代码中做同样的事情。所以不要从头开始重新创建轮子。在这些抽象术语中,它们是相同的。在几乎所有其他方面,它们都非常非常不同。