この記事では、Java でのスタックの使用法 (コード付き) を紹介します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
Java のスタックは初期のレガシー クラスです。Sun/Oracle はその使用を非推奨にしており、現在はレガシー コードとの互換性のためにのみ予約されています。
レガシー実装
以下に示すようにコードに示されているように、java.util.Stack の実装は動的配列に基づいており、Vector も放棄されたクラスです。
個人的には、この実装には 2 つの問題があります。
これは Vector に基づいており、同期が必要なため、パフォーマンスの低下が深刻です。
これはむしろ配列に基づいています。リンクされたリストよりもスタックが非常に大きくなります。 複数の展開が必要であり、不必要なパフォーマンスの損失が発生します。
public class Stack<E> extends Vector<E> { /** * Creates an empty Stack. */ public Stack() { } public E push(E item) { addElement(item); return item; } public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); } public boolean empty() { return size() == 0; } public synchronized int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; } /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = 1224463164541339165L; }
私自身の単純なカプセル化
次は、LinkedList カプセル化に基づくスタックです。
ここでのスタックはデコレータです。
import java.util.LinkedList; import java.util.NoSuchElementException; public class Stack<T> { private LinkedList<T> stack; Stack() { stack = new LinkedList<>(); } public void push(T o) { stack.add(o); } public T pop() { if (size() <= 0) { throw new NoSuchElementException("Stack is Empty."); } return stack.removeLast(); } public T peek() { if (size() <= 0) { throw new NoSuchElementException("Stack is Empty."); } return stack.getLast(); } public boolean empty() { return stack.size() == 0; } public int size() { return stack.size(); } }
この記事はここで終了しました。その他のエキサイティングなコンテンツについては、PHP 中国語 Web サイトの Java ビデオ チュートリアル 列に注目してください。
以上がJava でのスタックの使用法の概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。