2012-12-01 57 views
3

我使用java.util.Stack但我缺少一個MULTIPOP的Java java.util.Stack中MULTIPOP

stack.pop(10); 

應該給我10的列表(以下是堆棧沒有足夠的)從項目堆棧(並將其從堆棧中移除)。 java中有沒有標準的類?或者讓我通過myselfe來實現它?

回答

3

Eclipse Collections(原名稱爲GS Collections)中,我們有一個名爲ArrayStack的替代堆棧實現,它提供了這種類型的行爲。

MutableStack<String> stack = ArrayStack.newStackWith("j", "i", "h", "g", "f", "e", "d", "c", "b", "a"); 
ListIterable<String> result = stack.pop(2); 
Assert.assertEquals(FastList.newListWith("a", "b"), result); 
Assert.assertEquals(Arrays.asList("c", "d", "e", "f"), stack.pop(4, new ArrayList<String>())); 
Assert.assertEquals(ArrayStack.newStackFromTopToBottom("g", "h", "i", "j"), stack); 
Assert.assertEquals(HashBag.newBagWith("g", "h", "i", "j"), stack.pop(4, HashBag.<String>newBag())); 
Assert.assertTrue(stack.isEmpty()); 

我們也通過peek(int)支持多peek。

注意:我是Eclipse集合的提交者。

4

沒有multipop方法。你可以擴展堆棧來添加你自己的功能。

public class ImprovedStack<E> extends Stack<E> { 

    public synchronized E[] pop(int count) { 
     E[] objs = new E[count]; 
     for (int i = 0; i < count; i++) { 
      objs[i] = pop(); 
     } 
     return objs; 
    } 
} 

有了這個實施,如果堆棧具有比count較少的對象的的EmptyStackException將被拋出,但可以將其修改您的需求。

2

不要以爲Java中有這樣的標準impl;看看這個related question。 (我認爲這裏的答案非常簡潔)

1

你可以使用一個NavigableSet來保持你喜歡的數據的順序(使用自定義的比較器),並允許你查詢耳機,子集或尾部集。