Java java.util.Stack multipop

时间:2012-12-01 18:45:03

标签: java stack pop

我正在使用java.util.Stack,但我错过了一个多重

stack.pop(10);

它应该给我一个10(或更少是堆栈不包含足够)项目的列表从堆栈中(并从堆栈中删除它们)。 java中有标准类吗?或者让我由myselfe实施它?

4 个答案:

答案 0 :(得分:4)

没有multipop方法。您可以扩展Stack以添加自己的功能。

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,但您可以根据需要对其进行修改。

答案 1 :(得分: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)。

注意:我是Eclipse Collections的提交者。

答案 2 :(得分:2)

不要认为Java中有任何标准的impl;看看这个related question。 (我认为这里的答案非常简洁)

答案 3 :(得分:1)

您可以使用NavigableSet来保持数据的顺序(使用自定义比较器),并允许您查询耳机,子集或尾部。