【发布时间】:2011-12-05 09:19:55
【问题描述】:
我想在 Java 中创建一个堆栈,但要固定大小。例如,创建一个新堆栈,将大小设置为 10,然后当我将项目推送到堆栈时,它会填满,当它填满 10 时,堆栈中的最后一个项目被推开(移除)。我想使用 Stack,因为它使用 LIFO 并且非常适合我的需求。
但是 Stack 从 Vector 继承的 setSize() 方法似乎并没有真正限制 Stack 的大小。我想我错过了关于 Stacks 如何工作的一些东西,或者 Stacks 并不意味着受到限制,所以这是不可能的。请教育我!
【问题讨论】:
-
仅供参考,setSize 方法是从 Vector 继承的,这意味着 setSize 将导致添加空值以填充提供的新大小,或者丢弃超出新大小的现有对象。理论上你可以通过 if (stack.size() >= 10) { stack.setSize(10); } 无论何时推送到堆栈,但最好实现自己的自定义类。
-
我最初尝试这个只是为了看看它是否有效。这很奇怪,但似乎当我在堆栈上执行 setSize() 时,它会反转项目的顺序并从那里截断它们。所以我总是以堆栈中最初的 10 个项目结束。同样,另一种快速/肮脏的方法是 (stack.size() >= 10) { stack.remove(0);倒序时也会出现同样的问题,因此由于某种原因,0 索引是要删除的索引。
-
这可能只是意味着底层实现实际上是这样工作的,堆栈方法以相反的顺序返回给你,无论如何这很有意义。
-
好点,这可能正是正在发生的事情。
-
setSize()表明 Stack 不是 Vector,而是应该包含 Vector,继承不是实现的正确决定。