0

我是 struts2 的新手,在通过 struts2 进行操作时,我遇到了声明 valuestack 是对象堆栈和声明,其中讨论了当两个具有相同属性名称的对象存储在 value 对象上时如何进行解析。为了澄清这一点,我开始研究它是如何在 struts2 中实现的。当我进入最后一层时,我发现 struts2 在 peek 期间类似地将对象插入到 push 方法中的零位置,它从零位置获取对象。因此,根据我对 struts2 的理解,值堆栈将仅包含一个对象(这将是动作对象)。那是对的吗?如果不正确,我们什么时候可以在 valuestack 中存储多个对象而不是 action 对象?

当我通过http://en.wikipedia.org/wiki/Stack_(abstract_data_type )的堆栈时,我还提出了一些关于堆栈的基本问题。那里指出,在计算机科学中,堆栈是一种后进先出 (LIFO) 抽象数据类型和线性数据结构,其特点是两个基本操作,称为 push 和 pop 。我同意涉及推送和弹出操作的数据结构为堆栈分类。但是对后进先出的东西有疑问。当我在java中看到数组实现(也是堆栈并在同一个链接中声明)时,据我了解,它不遵循后进先出,因为我们可以通过索引访问任何元素,而不是最后一个元素有出来。如果我错了,不要喷我,因为这是我的符号。如果这是正确的,我们可以说堆栈不必是强制的 LIFO,它应该确认推送和弹出操作吗?

4

1 回答 1

6

不,值堆栈在几乎所有情况下都不会包含单个对象,如果它只允许单个对象,它就不会是一个太多的堆栈。

当您在位置 0 处插入一个对象时,它是一个推送——之前作为位置 0 的对象将位于位置 1,等等。这是一个正常的推送,使用该insert方法。

基本上所有正常的动作调用都会在堆栈上有多个对象。使用<s:debug>标签(下图)或转储堆栈可以轻松证明这一点。另外,<s:push>标签将对象添加到JSP页面上的堆栈,拦截器可以添加对象等。

您对堆栈是 LIFO 的观察很有趣,但最终无关紧要:正常的堆栈操作(推送、弹出)是使其成为 LIFO 的原因。这并不排除堆栈实现提供额外的访问模式。


调试标签值堆栈转储

于 2012-06-03T17:09:17.530 回答