创建固定大小的堆栈
我想在Java中创建一个堆栈,但要修复大小。例如,创建一个新的堆栈,将大小设置为 10,然后当我将项目推送到堆栈时,它会填满,当它填满最多 10 个时,堆栈中的最后一个项目被推掉(删除)。我想使用Stack,因为它使用LIFO并且非常符合我的需求。
但是 Stack 从 Vector 继承的 setSize() 方法似乎并没有真正限制 Stack 的大小。我认为我错过了一些关于Stacks如何工作的东西,或者也许Stacks不应该受到限制,所以这是不可能的。请教育我!
我想在Java中创建一个堆栈,但要修复大小。例如,创建一个新的堆栈,将大小设置为 10,然后当我将项目推送到堆栈时,它会填满,当它填满最多 10 个时,堆栈中的最后一个项目被推掉(删除)。我想使用Stack,因为它使用LIFO并且非常符合我的需求。
但是 Stack 从 Vector 继承的 setSize() 方法似乎并没有真正限制 Stack 的大小。我认为我错过了一些关于Stacks如何工作的东西,或者也许Stacks不应该受到限制,所以这是不可能的。请教育我!
下面是一个扩展的类型:SizedStack
Stack
import java.util.Stack;
public class SizedStack<T> extends Stack<T> {
private int maxSize;
public SizedStack(int size) {
super();
this.maxSize = size;
}
@Override
public T push(T object) {
//If the stack is too big, remove elements until it's the right size.
while (this.size() >= maxSize) {
this.remove(0);
}
return super.push(object);
}
}
像这样使用它:.除了尺寸之外,它的运行方式与其他任何 .Stack<Double> mySizedStack = new SizedStack<Double>(10);
Stack
您可以创建一个非常简单的堆栈,如下所示:
public class FixedStack<T>
{
private T[] stack;
private int size;
private int top;
public FixedStack<T>(int size)
{
this.stack = (T[]) new Object[size];
this.top = -1;
this.size = size;
}
public void push(T obj)
{
if (top >= size)
throw new IndexOutOfBoundsException("Stack size = " + size);
stack[++top] = obj;
}
public T pop()
{
if (top < 0) throw new IndexOutOfBoundsException();
T obj = stack[top--];
stack[top + 1] = null;
return obj;
}
public int size()
{
return size;
}
public int elements()
{
return top + 1;
}
}