CodeGym /Java Blog /ランダム /Java スタック 101: スタック クラスの詳細
John Squirrels
レベル 41
San Francisco

Java スタック 101: スタック クラスの詳細

ランダム グループに公開済み
Java のスタック、キュー、配列、リンク リスト、ツリーとよく似たデータ構造です。他のスタックと異なる点は、Javaスタックが後入れ先出し (LIFO) 原則に基づいていることです。これが意味するのは、2 つのコマンドを使用してスタックに要素を追加したりスタックから要素を削除したりすると、最初に削除したものが常に最後に追加したものになるということです。Javaスタッククラスを詳しく見てみましょう

Java スタック クラスの探索

Java StackクラスはVectorクラスの拡張であり、Vector クラス自体がListクラスを拡張します。ベクターは可変であり、内部の要素の要求に応じて拡大または縮小できるため、Stackのサイズも要求に応じて変更できます。Vectorクラスの拡張により、Vector をStackに変換する 5 つの操作が追加されます。これら 5 つの操作は次のとおりです。
  • .push(E item) – 要素をスタックの一番上に配置します
  • .pop() – スタックの最上位にある要素を削除し、それを関数の値として返します。
  • .peek() – スタックの一番上の要素を削除せずに調べます。
  • .empty() – スタックが空かどうかをテストするブール関数。0 または 1 を返します。
  • .search(Object o) – o を検索し、その位置を返します。値は 0 ベースではなく 1 ベースです
Stack は、 toString()contains()indexOf()、およびlastElement()を含むがこれらに限定されない、Vectorの一部であるすべてのメソッドも継承します。 Java スタック 101: スタック クラスの詳細 - 1

Java スタックのコーディング例

Stackの関数を理解したので、Java スタックの例をコーディングしましょう。スタックは、一時的に保存して迅速に取得する必要があるデータを処理する場合に非常に役立ちます。スタックはLIFO であるため、ツリー データ構造を探索する際のノード トラバーサルに非常に役立ちます。そのすべてに入る前に、基本的なスタックを作成しましょう。スタックを実装するコードは次のとおりです。

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
空のStack を作成するために必要な作業はこれだけです。次を使用して、データ型を宣言せずに単純に宣言することもできます。

Stack example = new Stack();
Stackは可変である ため、要素をスタックにプッシュすると、サイズが自動的に調整されることに注意してください。次に、スタック関数の使用方法を見てみましょう。

Java スタックの実装

先ほど簡単に説明した 5 つの方法の使用方法を見てみましょう。Java スタックの実装は、プレートの積み重ねとして考えると覚えやすいです。プレートをスタックに置きますが、プレートを取得するには、一番下に行くのではなく、一番上から取得します。最後に着たものが最初に脱ぎます。stackExampleを使用して前の例を拡張すると、関数は次のようになります。

押す


// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
この時点で、これら 2 つの整数を Java スタックの例に毎回プッシュしたかのように、他の関数を表示します。

ポップ


//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
出力:

10
5

空です

ここで、スタックからすべての要素を削除したいが、要素がいくつあるかわからないとします。Boolean.isEmpty()関数と前提条件 while ループを組み合わせて、 Stackからすべての要素をポップできます。この Java スタックの実装がどのように行われるかを見てください。

while(!stackExample.isEmpty()) {      
  System.out.println(stackExample.pop());
}
出力

10
5

ピーク

Java のスタック実装として.peek()を使用すると、スタック上の次の項目を削除せずに 確認できます。

System.out.println(stackExample.peek());
出力

10
Stack を ポップして出力すると、 10 がまだスタック上にあるため、 10 と 5 が返されます。確認しただけで、ポップ機能で削除したわけではありません。Peak 関数は、Java の Stackに最適なツールです。

検索

特定の要素を検索したい場合、Java のスタック実装は.search(e) を使用します。それを見つけるために。

System.out.println(stackExample.search(5));
出力

2
これは、スタック の先頭から数えることと、Java StackがArrayのように 0 ではなく 1 から始まるためであることに注意してください。したがって、スタックを見ると (10) --> (5) となり、5 が 2 位になります。Stackにない要素を見つけようとすると、出力として -1 が返されます。

反復

コレクションを操作するとき、複数の要素を検索する必要がある場合があります。複雑さを軽減し、スタックを複数回検索する手間を省くために、反復を使用できます。Java のStack はListクラスを拡張するため、反復処理にはいくつかのオプションがあります。最も簡単な方法の 1 つは、ListIterator関数を使用することです。ListIterator は、.hasPrevious()または.hasNext()を使用してスタックを上から下、または下から上にトラバースできるという点で優れています。その様子は次のとおりです。

ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
出力

10
5
Java でStackを 反復処理する場合、その中の要素は削除されないことに注意してください。反復処理により、基本的にスタック内のすべての要素を順番に覗くことができます。これを行うと、特定の要素が存在する場所を検索し、それらを調べて操作することができます。必要に応じて、それらをカウントしたり、削除したり、変更したりすることもできます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION