logo

Javaスタック

スタック オブジェクトのコレクションを格納するために使用される線形データ構造です。に基づいています 最初のうちの最後の (LIFO)。 Java コレクション フレームワークは、オブジェクトのコレクションを保存するための多くのインターフェイスとクラスを提供します。そのうちの 1 つは、 スタッククラス プッシュ、ポップ、検索などのさまざまな操作を提供します。

このセクションでは、 Javaスタッククラス 、 その メソッド、 そして 埋め込む のスタック データ構造 Javaプログラム 。ただし、Java Stack クラスに進む前に、スタックがどのように機能するかを簡単に理解してください。

スタック データ構造には、次の 2 つの最も重要な操作があります。 押す そして ポップ 。プッシュ操作はスタックに要素を挿入し、ポップ操作はスタックの先頭から要素を削除します。スタック上でどのように動作するかを見てみましょう。

Javaスタック

20、13、89、90、11、45、18 をそれぞれスタックにプッシュしましょう。

Javaスタック

18、45、11 をスタックから削除 (ポップ) してみましょう。

Javaスタック

空のスタック: スタックに要素がない場合は、 空のスタック 。スタックが空の場合、一番上の変数の値は -1 です。

偏微分記号ラテックス
Javaスタック

要素をスタックにプッシュすると、先頭は次のようになります。 1増加 。次の図では、

  • 12 を押す、トップ = 0
  • 6 を押す、トップ = 1
  • 9 を押す、トップ = 2
Javaスタック

スタックから要素をポップすると、top の値は次のようになります。 1減少 。次の図では、9 をポップしています。

Javaスタック

次の表は、上部のさまざまな値を示しています。

Javaスタック

Javaスタッククラス

Javaでは、 スタック は、コレクション フレームワークに分類されるクラスであり、 ベクター クラス。インターフェイスも実装します リスト、コレクション、反復可能、クローン可能、シリアル化可能。 これはオブジェクトの LIFO スタックを表します。 Stack クラスを使用する前に、java.utilパッケージ。以下に示すように、コレクション フレームワーク階層に配置されたスタック クラス。

Javaスタック

スタッククラスコンストラクター

Stack クラスには、 デフォルトのコンストラクター 空のスタックが作成されます。

 public Stack() 

スタックの作成

スタックを作成したい場合は、まず、java.utilパッケージ化して Stack クラスのオブジェクトを作成します。

 Stack stk = new Stack(); 

または

 Stack stk = new Stack(); 

type は、Integer、String などのスタックのタイプを示します。

Stack クラスのメソッド

スタック上でプッシュ、ポップ、ピーク、検索操作を実行できます。 Java Stack クラスは、これらの操作を実行するための主に 5 つのメソッドを提供します。これに加えて、次のすべてのメソッドも提供します。 Java ベクター クラス

方法 修飾子とタイプ メソッドの説明
空の() ブール値 このメソッドは、スタックが空かどうかをチェックします。
プッシュ(E項目) そして このメソッドは、要素をスタックの最上部にプッシュ (挿入) します。
ポップ() そして このメソッドはスタックの最上位から要素を削除し、同じ要素をその関数の値として返します。
ピーク() そして このメソッドは、スタックの最上位要素を削除せずに調べます。
search(オブジェクトo) 整数 このメソッドは、指定されたオブジェクトを検索し、オブジェクトの位置を返します。

スタッククラスの empty() メソッド

空の() Stack クラスのメソッドは、スタックが空かどうかを確認します。スタックが空の場合は true を返し、それ以外の場合は false を返します。 Vector クラスの isEmpty() メソッドを使用することもできます。

構文

 public boolean empty() 

戻り値: このメソッドは、スタックが空の場合は true を返し、それ以外の場合は false を返します。

次の例では、Stack クラスのインスタンスを作成しました。その後、empty() メソッドを 2 回呼び出しました。初めて戻ったとき 真実 要素をスタックにプッシュしていないためです。その後、要素をスタックにプッシュしました。再度、empty() メソッドを呼び出しました。 間違い スタックが空ではないためです。

StackEmptyMethodExample.java

 import java.util.Stack; public class StackEmptyMethodExample { public static void main(String[] args) { //creating an instance of Stack class Stack stk= new Stack(); // checking stack is empty or not boolean result = stk.empty(); System.out.println('Is the stack empty? ' + result); // pushing elements into stack stk.push(78); stk.push(113); stk.push(90); stk.push(120); //prints elements of the stack System.out.println('Elements in Stack: ' + stk); result = stk.empty(); System.out.println('Is the stack empty? ' + result); } } 

出力:

Javaプログラミング素数
 Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false 

スタッククラスのpush()メソッド

このメソッドは、アイテムをスタックの一番上に挿入します。これは、Vector クラスの addElement(item) メソッドと同じように機能します。パラメータを渡します アイテム スタックにプッシュされます。

構文

 public E push(E item) 

パラメータ: スタックの一番上にプッシュされるアイテム。

戻り値: このメソッドは、パラメーターとして渡した引数を返します。

スタッククラスのpop()メソッド

このメソッドは、スタックの最上位にあるオブジェクトを削除し、同じオブジェクトを返します。投げる 空のスタック例外 スタックが空の場合。

構文

 public E pop() 

戻り値: スタックの最上位にあるオブジェクトを返します。

Java プログラムにスタックを実装し、プッシュおよびポップ操作を実行してみましょう。

StackPushPopExample.java

 import java.util.*; public class StackPushPopExample { public static void main(String args[]) { //creating an object of Stack class Stack stk = new Stack(); System.out.println('stack: ' + stk); //pushing elements into the stack pushelmnt(stk, 20); pushelmnt(stk, 13); pushelmnt(stk, 89); pushelmnt(stk, 90); pushelmnt(stk, 11); pushelmnt(stk, 45); pushelmnt(stk, 18); //popping elements from the stack popelmnt(stk); popelmnt(stk); //throws exception if the stack is empty try { popelmnt(stk); } catch (EmptyStackException e) { System.out.println('empty stack'); } } //performing push operation static void pushelmnt(Stack stk, int x) { //invoking push() method stk.push(new Integer(x)); System.out.println('push -> ' + x); //prints modified stack System.out.println('stack: ' + stk); } //performing pop operation static void popelmnt(Stack stk) { System.out.print('pop -> '); //invoking pop() method Integer x = (Integer) stk.pop(); System.out.println(x); //prints modified stack System.out.println('stack: ' + stk); } } 

出力:

 stack: [] push -> 20 stack: [20] push -> 13 stack: [20, 13] push -> 89 stack: [20, 13, 89] push -> 90 stack: [20, 13, 89, 90] push -> 11 stack: [20, 13, 89, 90, 11] push -> 45 stack: [20, 13, 89, 90, 11, 45] push -> 18 stack: [20, 13, 89, 90, 11, 45, 18] pop -> 18 stack: [20, 13, 89, 90, 11, 45] pop -> 45 stack: [20, 13, 89, 90, 11] pop -> 11 stack: [20, 13, 89, 90] 

スタッククラスのpeek()メソッド

スタックの一番上にある要素を調べます。それも投げます 空のスタック例外 スタックが空の場合。

構文

 public E peek() 

戻り値: スタックの最上位の要素を返します。

Peak() メソッドの例を見てみましょう。

StackPeekMethodExample.java

互換性テスト
 import java.util.Stack; public class StackPeekMethodExample { public static void main(String[] args) { Stack stk= new Stack(); // pushing elements into Stack stk.push('Apple'); stk.push('Grapes'); stk.push('Mango'); stk.push('Orange'); System.out.println('Stack: ' + stk); // Access element from the top of the stack String fruits = stk.peek(); //prints stack System.out.println('Element at top: ' + fruits); } } 

出力:

 Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange 

このメソッドは、スタック内のオブジェクトを上から検索します。検索したいパラメータを解析します。スタック内のオブジェクトの 1 から始まる位置を返します。スタックの最上位のオブジェクトは距離 1 にあると見なされます。

o がスタック内の検索対象のオブジェクトであるとします。このメソッドは、スタックの先頭に最も近いオカレンスのスタックの先頭からの距離を返します。それは使用しています 等しい() スタック内のオブジェクトを検索するメソッド。

構文

 public int search(Object o) 

パラメータ: o は検索対象のオブジェクトです。

戻り値: スタックの最上位からオブジェクトの位置を返します。 -1 が返された場合は、オブジェクトがスタック上にないことを意味します。

search() メソッドの例を見てみましょう。

Javaでのintからstringへの変換

StackSearchMethodExample.java

 import java.util.Stack; public class StackSearchMethodExample { public static void main(String[] args) { Stack stk= new Stack(); //pushing elements into Stack stk.push('Mac Book'); stk.push('HP'); stk.push('DELL'); stk.push('Asus'); System.out.println('Stack: ' + stk); // Search an element int location = stk.search('HP'); System.out.println('Location of Dell: ' + location); } } 

Java スタックの操作

スタックのサイズ

Vector クラスの size() メソッドを使用してスタックのサイズを確認することもできます。スタック内の要素の総数 (スタックのサイズ) を返します。

構文

 public int size() 

Vector クラスの size() メソッドの例を見てみましょう。

StackSizeExample.java

 import java.util.Stack; public class StackSizeExample { public static void main (String[] args) { Stack stk = new Stack(); stk.push(22); stk.push(33); stk.push(44); stk.push(55); stk.push(66); // Checks the Stack is empty or not boolean rslt=stk.empty(); System.out.println('Is the stack empty or not? ' +rslt); // Find the size of the Stack int x=stk.size(); System.out.println('The stack size is: '+x); } } 

出力:

 Is the stack empty or not? false The stack size is: 5 

要素を反復する

反復とは、スタックの要素をフェッチすることを意味します。次の 3 つの異なる方法を使用してスタックの要素をフェッチできます。

  • 使用する イテレータ() 方法
  • 使用する forEach() 方法
  • 使用する listIterator() 方法

iterator() メソッドの使用

Iteratorインターフェースのメソッドです。スタック内の要素に対する反復子を返します。 iterator() メソッドを使用する前に、java.util.Iteratorパッケージ。

構文

 Iterator iterator() 

スタックに対して反復を実行してみましょう。

Linuxのエクスポートとは何ですか

StackIterationExample1.java

 import java.util.Iterator; import java.util.Stack; public class StackIterationExample1 { public static void main (String[] args) { //creating an object of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push('BMW'); stk.push('Audi'); stk.push('Ferrari'); stk.push('Bugatti'); stk.push('Jaguar'); //iteration over the stack Iterator iterator = stk.iterator(); while(iterator.hasNext()) { Object values = iterator.next(); System.out.println(values); } } } 

出力:

 BMW Audi Ferrari Bugatti Jaguar 

forEach() メソッドの使用

Java には、要素を反復処理するための forEach() メソッドが用意されています。メソッドは次のように定義されています。 反復可能 そして ストリーム インターフェース。

構文

 default void forEach(Consumeraction) 

forEach() メソッドを使用してスタックを反復処理してみましょう。

StackIterationExample2.java

 import java.util.*; public class StackIterationExample2 { public static void main (String[] args) { //creating an instance of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push(119); stk.push(203); stk.push(988); System.out.println('Iteration over the stack using forEach() Method:'); //invoking forEach() method for iteration over the stack stk.forEach(n -> { System.out.println(n); }); } } 

出力:

 Iteration over the stack using forEach() Method: 119 203 988 

listIterator() メソッドの使用

このメソッドは、リスト内の指定された位置から開始して、指定されたリスト内の要素に対するリスト反復子を (順番に) 返します。スタックを上から下に繰り返します。

構文

 ListIterator listIterator(int index) 

パラメータ: このメソッドは、という名前のパラメータを解析します。 索引。

戻り値: このメソッドは、要素に対するリスト反復子を順番に返します。

例外: 投げる IndexOutOfBoundsException インデックスが範囲外の場合。

listIterator() メソッドを使用してスタックを反復処理してみましょう。

StackIterationExample3.java

 import java.util.Iterator; import java.util.ListIterator; import java.util.Stack; public class StackIterationExample3 { public static void main (String[] args) { Stack stk = new Stack(); stk.push(119); stk.push(203); stk.push(988); ListIterator ListIterator = stk.listIterator(stk.size()); System.out.println('Iteration over the Stack from top to bottom:'); while (ListIterator.hasPrevious()) { Integer avg = ListIterator.previous(); System.out.println(avg); } } } 

出力:

 Iteration over the Stack from top to bottom: 988 203 119