我想创建一个固定大小的堆栈,并在满了时截断堆栈。为此已经在Creating a fixed-size Stack中存在一种方法,但我不想实现一个类。
可以做这样的事情吗?
Stack<String> stack = new Stack<String>(){
private static final long serialVersionUID = 1L;
public String push(String item) {
if (this.size() == FIXED_SIZE) {
//truncate()
}
return super.push(item);
}
};
其余的堆栈方法保持不变?
答案 0 :(得分:2)
所以这就是我在documentation中找到的。我没有使用或测试过它。所以我不确定这会如何发挥作用。因为removeElementAt()
是从Vector类继承的,我希望removeElementAt(0)
仍然会删除底部的元素。
Stack<String> stack = new Stack<String>(){
private static final long serialVersionUID = 1L;
public String push(String item) {
if (this.size() == FIXED_SIZE) {
this.removeElementAt(0);
}
return super.push(item);
}
};
而且我假设你,truncate的意思是删除当前列表中的第一个元素,如果你只想拒绝新的元素,你可以返回null
。< / p>
答案 1 :(得分:0)
这样的事情怎么样:
Public class TruncatedStack<T> extends FixedStack<T>
{
private static final long serialVersionUID = 1L;
@Override
public String push(String item) {
if (this.top == size) {
this.top = -1;
return super.push(item);
}
}
答案 2 :(得分:0)
写下我的头顶(未经测试)。正如评论中所提到的,固定大小的堆栈只是一个带有计数器的数组,用于跟踪顶部。
public class FixedSizeStack {
int top, numElements;
int[] baseArray;
public FixedSizeStack(int maxSize) {
top = 0;
numElements = 0;
baseArray = new int[maxSize];
}
public void push(int num) {
baseArray[top] = num;
top = (top+1) % baseArray.length;
numElements++;
}
public int pop(int num) {
if(numElements == 0) return null; //or throw exception--you've removed too many elements!
numElements--;
top = (top == 0) ? (baseArray.length - 1) : (top - 1);
return baseArray[top];
}
}