固定大小的堆栈Java

  • 本文关键字:堆栈 Java java 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);
    }
};

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

这就是我在文档中发现的。我没有使用或测试它。所以我不确定这将如何解决。因为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);
    }
};

我也假设,你所说的截断是为了删除当前列表中的第一个元素,如果你只是想拒绝新的元素,你可以返回null

这样如何:

 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);
    }
 }

这是我随口写的(未经测试)。正如在评论中提到的,固定大小的堆栈只是一个带有计数器的数组,用于跟踪顶部。

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

是的,你几乎完全正确。你只需要做一个this.remove(0),然后你就完成了。

Stack<String> stack = new Stack<String>(){
    @Override
    public String push(String item) {
        if (this.size() == FIXED_SIZE) {
            this.remove(0)
        }
        return super.push(item);
    }
};

最新更新