3

使用してjava.util.Stackいますが、マルチポップがありません

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コレクションには、まさにこのタイプの動作を提供するという代替の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コレクションのコミッターです。

于 2013-01-03T19:23:35.197 に答える
2

Javaにはこれに標準的な実装があるとは思わないでください。この関連する質問を見てください。(ここでの答えは非常に簡潔だと思います)

于 2012-12-01T18:48:58.893 に答える
1

NavigableSetを使用すると、データを好みの順序で保持し(これにはカスタムコンパレータを使用)、ヘッドセット、サブセット、またはテールセットをクエリできます。

于 2012-12-01T18:50:11.700 に答える