2014-03-13 153 views
1

我想創建一個固定大小的堆棧並在堆滿時截斷堆棧。對於這個已經存在的方法Creating a fixed-size Stack,但我不想實現一個類。固定大小堆棧Java

有可能做這樣的事情嗎?

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

和堆疊方法其餘保持不變?

+2

是否要截斷或清除? –

+0

對不起,截斷。我怎樣才能做到這一點? – user3413147

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

而且還我假設,你的意思截斷是去除先入元素目前在列表中,如果你只是想拒絕新產品元素,你可以只返回null

+0

恰恰是這個。謝謝! – user3413147

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

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