簡體   English   中英

Java java.util.Stack multipop

[英]Java java.util.Stack multipop

我正在使用java.util.Stack但我錯過了一個multipop

stack.pop(10);

這應該給我一個10的列表(或更少的是堆棧不包含足夠的)從堆棧中的項目(並從堆棧中刪除它們)。 java中有標准類嗎? 或者讓我由myselfe實施?

沒有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少於count ,則拋出EmptyStackException,但您可以根據需要對其進行修改。

Eclipse Collections中,有一個名為ArrayStack的替代Stack實現,它提供了這種類型的行為。

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的提交者。

不要認為在Java中有任何標准的impl; 看看這個相關的問題 (我認為這里的答案非常簡潔)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM