在java中,哪個LIFO數據結構類允許我指定最大項目大小,只要添加項目就會自動丟棄舊項目,這會導致項目超過MAX大小。保存最多N個項目的LIFO數據結構
2
A
回答
3
您可以繼承Stack
以獲得所需的行爲。你只需要重寫push()
檢查大小是否大於N,並丟棄舊項目:
@Override
public void push(E elt) {
super.push(elt);
while (this.size() > this.maxSize) {
this.removeElementAt(this.size() - 1);
}
}
可能會接近你想要什麼。
0
在Java中沒有這樣的結構。我希望這個定製的實現提供您的需求:
BlockingDeque<Object> deque = new LinkedBlockingDeque<Object>(32) {
public void push(Object e) {
final java.util.concurrent.locks.ReentrantLock lock;
try {
Field lockField = LinkedBlockingDeque.class.getDeclaredField("lock");
lockField.setAccessible(true);
lock = (ReentrantLock) lockField.get(this);
} catch (NoSuchFieldException e1) {
throw new RuntimeException(e1);
} catch (SecurityException e1) {
throw new RuntimeException(e1);
} catch (IllegalArgumentException e1) {
throw new RuntimeException(e1);
} catch (IllegalAccessException e1) {
throw new RuntimeException(e1);
}
lock.lock();
try {
if (!offerFirst(e)) {
pollLast();
offerFirst(e);
}
} finally {
lock.unlock();
}
}
};
然後你使用它像一個堆棧(deque的替換舊的Stack類):
deque.push(new Object());
Object o = deque.pop();
對不起,所有的鎖的東西,但它需要以避免不一致。
相關問題
- 1. 快速包含和LIFO數據結構
- 2. 僅存儲最近n個條目的字典或類似數據結構?
- 3. 多個MVC項目結構
- 4. 具有多個值的單個項目的Python數據結構
- 5. C++最佳數據結構來存儲最後X個傳入項目?
- 6. 什麼是最近n秒內存儲數據點的最佳數據結構
- 7. 保存大量數據的最佳數據結構?
- 8. 數據結構項目
- 9. 保存多個行項目
- 10. 存儲特定結構化數據的最佳數據結構
- 11. 適當的數據結構來存儲C++中的最後n個元素
- 12. 將數據結構保存在多個頁面上?
- 13. bsearch結構中的多個項目
- 14. Python的結構遍歷多個項目
- 15. 在顛覆代碼的項目中保持數據庫結構是最新的?
- 16. py2app - 保存目錄結構
- 17. 在瀏覽項目列表時保存多個項目的數據
- 18. 保存配對值的數據結構
- 19. 保存3000值的數據結構
- 20. 最好的數據結構來保存一個單詞到相應的數字?
- 21. 核心數據 - 保存「項目數」的最佳方法
- 22. 數據庫設計,以保存多個項目類型
- 23. 保存多個項目到SQL數據庫
- 24. 有效的數據結構來保存/添加/刪除重複項目
- 25. WPF - MVVM多個項目結構
- 26. 如何從數據庫中保存一個項目的最新條目
- 27. TFS結構 - 多個項目還是單個項目?
- 28. GIT從一個多項目結構克隆一個SVN項目
- 29. PHP:根據n生成n個頁面n數據庫中的項目數
- 30. 數據結構內存映射或數據庫? (百萬個項目)
將數組組織爲一個循環緩衝區?.. – dasblinkenlight 2012-04-28 01:31:56
我不知道Java,但可以編寫一個類來控制輸入,輸出和檢查,如集合對象。 – 2012-04-28 01:33:59