3

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

stack.pop(10);

这应该给我一个列表,其中包含 10 个(或更少是堆栈不包含足够的)堆栈中的项目(并将它们从堆栈中删除)。java中是否有任何标准类?还是让我自己实施?

4

4 回答 4

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

使用此实现,如果堆栈中的对象少于 ,则会引发 EmptyStackException count,但您可以根据需要对其进行修改。

于 2012-12-01T18:48:54.797 回答
3

Eclipse Collections中,有一个Stack名为的替代实现ArrayStack恰好提供了这种类型的行为。

MutableStack<String> stack =
    Stacks.mutable.with("j", "i", "h", "g", "f", "e", "d", "c", "b", "a");

ListIterable<String> result = stack.pop(2);
Assert.assertEquals(Lists.mutable.with("a", "b"), result);

ArrayList<String> arrayList = stack.pop(4, new ArrayList<>());
Assert.assertEquals(Arrays.asList("c", "d", "e", "f"), arrayList);

Assert.assertEquals(Stacks.mutable.withReversed("g", "h", "i", "j"), stack);

MutableBag<String> bag = stack.pop(4, Bags.mutable.empty());
Assert.assertEquals(Bags.mutable.with("g", "h", "i", "j"), bag);

Assert.assertTrue(stack.isEmpty());

通过 peek(int) 还支持多视图。

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

于 2013-01-03T19:23:35.197 回答
2

不要认为在 Java 中有任何标准的实现。看看这个相关的问题。(我认为这里的答案非常简洁)

于 2012-12-01T18:48:58.893 回答
1

您可以使用NavigableSet将数据保持在您喜欢的顺序(为此使用自定义比较器)并允许您查询耳机、子集或尾部。

于 2012-12-01T18:50:11.700 回答