使用してjava.util.Stack
いますが、マルチポップがありません
stack.pop(10);
これにより、スタックから10個の(またはスタックに十分な数が含まれていない)アイテムのリストが表示されます(スタックからそれらを削除します)。Javaに標準クラスはありますか?または私はそれを自分で実装する必要がありますか?
方法はありません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
れますが、必要に応じて変更できます。
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コレクションのコミッターです。
Javaにはこれに標準的な実装があるとは思わないでください。この関連する質問を見てください。(ここでの答えは非常に簡潔だと思います)
NavigableSetを使用すると、データを好みの順序で保持し(これにはカスタムコンパレータを使用)、ヘッドセット、サブセット、またはテールセットをクエリできます。