固定大小Stack Java

时间:2014-03-13 00:07:11

标签: java stack

我想创建一个固定大小的堆栈,并在满了时截断堆栈。为此已经在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);
    }
};

其余的堆栈方法保持不变?

3 个答案:

答案 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];
  }
}