ホームページ > Java > &#&チュートリアル > Java でのスタックの使用法の概要 (コード付き)

Java でのスタックの使用法の概要 (コード付き)

不言
リリース: 2019-03-29 11:13:01
転載
3226 人が閲覧しました

この記事では、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート