我使用java.util.Stack
但我缺少一個MULTIPOP的Java java.util.Stack中MULTIPOP
stack.pop(10);
應該給我10的列表(以下是堆棧沒有足夠的)從項目堆棧(並將其從堆棧中移除)。 java中有沒有標準的類?或者讓我通過myselfe來實現它?
我使用java.util.Stack
但我缺少一個MULTIPOP的Java java.util.Stack中MULTIPOP
stack.pop(10);
應該給我10的列表(以下是堆棧沒有足夠的)從項目堆棧(並將其從堆棧中移除)。 java中有沒有標準的類?或者讓我通過myselfe來實現它?
在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集合的提交者。
沒有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將被拋出,但可以將其修改您的需求。
不要以爲Java中有這樣的標準impl;看看這個related question。 (我認爲這裏的答案非常簡潔)
你可以使用一個NavigableSet來保持你喜歡的數據的順序(使用自定義的比較器),並允許你查詢耳機,子集或尾部集。