ジャワ 収集フレームワーク をモデル化して実装する Stack クラスを提供します。 以下の図は、 Stackクラスの階層 :

クラスは 1 つをサポートします デフォルトのコンストラクター スタック() 慣れているもの 空のスタックを作成する 。
宣言:
public class Stack extends Vector>
実装されているすべてのインターフェイス:
- シリアル化可能: これは、クラスがシリアル化および逆シリアル化される場合に実装する必要があるマーカー インターフェイスです。
- クローン可能: これは Java のインターフェイスであり、オブジェクトのクローンを作成できるようにするためにクラスによって実装される必要があります。
- 反復可能: このインターフェイスは、反復可能、つまり反復可能なオブジェクトのコレクションを表します。
- コレクション: コレクションは、要素として知られるオブジェクトのグループを表します。 Collection インターフェイスは、最大限の汎用性が求められるオブジェクトのコレクションを渡すために使用されます。
- リスト: List インターフェイスは、順序付けられたコレクションを保存する方法を提供します。 Collectionの子インターフェースです。
- ランダムアクセス: これは、リスト実装が高速 (通常は一定時間) ランダム アクセスをサポートしていることを示すために使用されるマーカー インターフェイスです。
スタックを作成するにはどうすればよいですか?
スタックを作成するには、インポートする必要があります java.util.スタック パッケージを作成し、このクラスの Stack() コンストラクターを使用します。以下の例では、空のスタックを作成します。
スタック stack = new Stack();
ここで、E はオブジェクトのタイプです。
例:
ジャワ
// Java code for stack implementation> import> java.io.*;> import> java.util.*;> class> Test> {> >// Pushing element on the top of the stack> >static> void> stack_push(Stack stack)> >{> >for>(>int> i =>0>; i <>5>; i++)> >{> >stack.push(i);> >}> >}> > >// Popping element from the top of the stack> >static> void> stack_pop(Stack stack)> >{> >System.out.println(>'Pop Operation:'>);> >for>(>int> i =>0>; i <>5>; i++)> >{> >Integer y = (Integer) stack.pop();> >System.out.println(y);> >}> >}> >// Displaying element on the top of the stack> >static> void> stack_peek(Stack stack)> >{> >Integer element = (Integer) stack.peek();> >System.out.println(>'Element on stack top: '> + element);> >}> > >// Searching element in the stack> >static> void> stack_search(Stack stack,>int> element)> >{> >Integer pos = (Integer) stack.search(element);> >if>(pos == ->1>)> >System.out.println(>'Element not found'>);> >else> >System.out.println(>'Element is found at position: '> + pos);> >}> >public> static> void> main (String[] args)> >{> >Stack stack =>new> Stack();> >stack_push(stack);> >stack_pop(stack);> >stack_push(stack);> >stack_peek(stack);> >stack_search(stack,>2>);> >stack_search(stack,>6>);> >}> }> |
Java ファイルを開く
>
>
出力:
Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found>
Stackクラスに対してさまざまな操作を実行する
1. 要素の追加: スタックに要素を追加するには、 Push()メソッド 。これ 押す() 操作により、要素がスタックの最上位に配置されます。
ジャワ
// Java program to add the> // elements in the stack> import> java.io.*;> import> java.util.*;> class> StackDemo {> > >// Main Method> >public> static> void> main(String[] args)> >{> >// Default initialization of Stack> >Stack stack1 =>new> Stack();> >// Initialization of Stack> >// using Generics> >Stack stack2 =>new> Stack();> >// pushing the elements> >stack1.push(>'4'>);> >stack1.push(>'All'>);> >stack1.push(>'Geeks'>);> >stack2.push(>'Geeks'>);> >stack2.push(>'For'>);> >stack2.push(>'Geeks'>);> >// Printing the Stack Elements> >System.out.println(stack1);> >System.out.println(stack2);> >}> }> |
>
>
出力:
[4, All, Geeks] [Geeks, For, Geeks]>
2. 要素へのアクセス: スタックの最初の要素またはスタックの先頭にある要素を取得またはフェッチするには、次のように使用できます。 ピーク() 方法。取得された要素は削除されず、スタックから削除されません。
ジャワ
// Java program to demonstrate the accessing> // of the elements from the stack> import> java.util.*;> import> java.io.*;> public> class> StackDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating an empty Stack> >Stack stack =>new> Stack();> >// Use push() to add elements into the Stack> >stack.push(>'Welcome'>);> >stack.push(>'To'>);> >stack.push(>'Geeks'>);> >stack.push(>'For'>);> >stack.push(>'Geeks'>);> >// Displaying the Stack> >System.out.println(>'Initial Stack: '> + stack);> >// Fetching the element at the head of the Stack> >System.out.println(>'The element at the top of the'> >+>' stack is: '> + stack.peek());> >// Displaying the Stack after the Operation> >System.out.println(>'Final Stack: '> + stack);> >}> }> |
C言語の行列
>
>
出力:
Initial Stack: [Welcome, To, Geeks, For, Geeks] The element at the top of the stack is: Geeks Final Stack: [Welcome, To, Geeks, For, Geeks]>
3. 要素の削除: スタックから要素をポップするには、 ポップ() 方法。要素はスタックの最上位からポップされ、スタックから削除されます。
ジャワ
// Java program to demonstrate the removing> // of the elements from the stack> import> java.util.*;> import> java.io.*;> public> class> StackDemo {> >public> static> void> main(String args[])> >{> >// Creating an empty Stack> >Stack stack =>new> Stack();> >// Use add() method to add elements> >stack.push(>10>);> >stack.push(>15>);> >stack.push(>30>);> >stack.push(>20>);> >stack.push(>5>);> >// Displaying the Stack> >System.out.println(>'Initial Stack: '> + stack);> >// Removing elements using pop() method> >System.out.println(>'Popped element: '> >+ stack.pop());> >System.out.println(>'Popped element: '> >+ stack.pop());> >// Displaying the Stack after pop operation> >System.out.println(>'Stack after pop operation '> >+ stack);> >}> }> |
>
>
出力:
Initial Stack: [10, 15, 30, 20, 5] Popped element: 5 Popped element: 20 Stack after pop operation [10, 15, 30]>
例
Java では、Stack クラスは Vector クラスのサブクラスであり、オブジェクトの後入れ先出し (LIFO) スタックを表します。 Vector クラスを拡張して、スタック データ構造を簡単に実装できるようにします。
Java で Stack クラスを使用する方法の例を次に示します。
ジャワ
import> java.util.Stack;> public> class> StackExample {> >public> static> void> main(String[] args) {> >// Create a new stack> >Stack stack =>new> Stack();> >// Push elements onto the stack> >stack.push(>1>);> >stack.push(>2>);> >stack.push(>3>);> >stack.push(>4>);> >// Pop elements from the stack> >while>(!stack.isEmpty()) {> >System.out.println(stack.pop());> >}> >}> }> |
>
>出力
4 3 2 1>
この例では、まず java.util パッケージから Stack クラスをインポートします。次に、デフォルトのコンストラクターを使用して、stack という名前の新しい Stack オブジェクトを作成します。 Push() メソッドを使用して、4 つの整数をスタックにプッシュします。次に、while ループ内で Pop() メソッドを使用してスタックから要素をポップします。 isEmpty() メソッドは、要素をポップする前にスタックが空かどうかをチェックするために使用されます。
このコードは整数のスタックを作成し、4 つの整数を 1 -> 2 -> 3 -> 4 の順序でスタックにプッシュします。次に、pop() メソッドを使用してスタックから要素を 1 つずつポップし、要素を削除して返します。スタックの最上位要素。スタックは後入れ先出し (LIFO) 順序に従っているため、要素は挿入の逆の順序でポップされ、上記の出力が得られます。
Stack クラスには、スタックを操作するためのメソッドが他にもいくつか用意されています。たとえば、先頭の要素を削除せずに取得する Peak()、スタック内の要素を検索してその位置を返す search()、現在の要素を返す size() などです。スタックのサイズ。 Stack クラスは、指定された初期容量を持つスタックを作成したり、既存のスタックをコピーしたりするためのいくつかのコンストラクターも提供します。
スタッククラスのメソッド
| 方法 git でのチェックアウト | 説明 |
|---|---|
| 空の() | スタックの一番上に何もない場合は true を返します。それ以外の場合は false を返します。 |
| ピーク() | スタックの最上位にある要素を返しますが、削除はしません。 |
| ポップ() | スタックの最上位要素を削除して返します。 「EmptyStackException」 呼び出しスタックが空のときに Pop() を呼び出すと、例外がスローされます。 |
| Push(オブジェクト要素) | 要素をスタックの最上位にプッシュします。 |
| search(オブジェクト要素) | オブジェクトがスタックに存在するかどうかを判断します。要素が見つかった場合は、 スタックの先頭から要素の位置を返します。それ以外の場合は、-1 を返します。 |
クラス java.util.Vector から継承されたメソッド
| 方法 | 説明 |
|---|---|
| add(オブジェクトオブジェクト) | 指定された要素をこの Vector の末尾に追加します。 |
| add(int インデックス, オブジェクト obj) | 指定された要素をこの Vector 内の指定された位置に挿入します。 |
| addAll(コレクションc) | 指定されたコレクション内のすべての要素をこの Vector の末尾に追加します。 指定されたコレクションのイテレータによって返される順序で。 |
| addAll(int インデックス, コレクション c) | 指定された Collection 内のすべての要素を、この Vector の指定された位置に挿入します。 |
| addElement(オブジェクトo) | 指定されたコンポーネントをこのベクトルの末尾に追加し、サイズを 1 つ増やします。 |
| 容量() | このベクトルの現在の容量を返します。 |
| クリア() | この Vector からすべての要素を削除します。 |
| クローン() | このベクターのクローンを返します。 |
| contains(オブジェクト o) | このベクトルに指定された要素が含まれている場合は true を返します。 |
| すべてを含む(コレクション c) | この Vector に指定された Collection 内のすべての要素が含まれている場合は true を返します。 |
| copyInto(オブジェクト []配列) | このベクトルのコンポーネントを指定された配列にコピーします。 |
| elementAt(int インデックス) | 指定されたインデックスにあるコンポーネントを返します。 |
| 要素() | このベクトルのコンポーネントの列挙を返します。 |
| ensureCapacity(int minCapacity) | 必要に応じて、このベクターの容量を増やして、確実に保持できるようにします。 少なくとも最小容量引数で指定されたコンポーネントの数。 |
| 等しい() | 指定されたオブジェクトとこのベクターが等しいかどうかを比較します。 |
| firstElement() | このベクトルの最初のコンポーネント (インデックス 0 の項目) を返します。 |
| get(int インデックス) | この Vector 内の指定された位置にある要素を返します。 |
| ハッシュコード() | このベクターのハッシュ コード値を返します。 |
| IndexOf(オブジェクトo) | このベクトル内で指定された要素が最初に出現するインデックス、または -1 を返します。 このベクトルに要素が含まれていない場合。 |
| IndexOf(オブジェクト o, int インデックス) | このベクトル内で指定された要素が最初に出現するインデックスを返し、インデックスから前方に検索します。要素が見つからない場合は -1 を返します。 |
| insertElementAt(オブジェクト o, int インデックス) | 指定されたオブジェクトをコンポーネントとしてこのベクトルの指定されたインデックスに挿入します。 |
| isEmpty() | このベクトルにコンポーネントがないかどうかをテストします。 |
| イテレータ() | このリスト内の要素に対する反復子を適切な順序で返します。 |
| lastElement() | ベクトルの最後のコンポーネントを返します。 |
| lastIndexOf(オブジェクトo) | このベクトル内で指定された要素が最後に出現したインデックス、または -1 を返します。 このベクトルに要素が含まれていない場合。 |
| lastIndexOf(オブジェクト o, int インデックス) | このベクトル内で指定された要素が最後に出現したインデックスを返します。 インデックスから逆方向に検索するか、要素が見つからない場合は -1 を返します。 |
| listIterator() | このリスト内の要素に対するリスト反復子を (適切な順序で) 返します。 |
| listIterator(int インデックス) | このリスト内の要素に対するリスト反復子を (適切な順序で) 返します。 リスト内の指定された位置から開始します。 |
| 削除(int インデックス) | この Vector 内の指定された位置にある要素を削除します。 |
| 削除(オブジェクトo) | このベクター内の指定された要素の最初の出現を削除します。ベクターに要素が含まれていない場合、要素は変更されません。 |
| すべて削除(コレクション c) | 指定されたコレクションに含まれるすべての要素をこの Vector から削除します。 |
| 削除すべての要素() | このベクトルからすべてのコンポーネントを削除し、そのサイズを 0 に設定します。 |
| 削除要素(オブジェクトo) | このベクトルから最初に出現した (インデックスが最も低い) 引数を削除します。 |
| RemoveElementAt(int インデックス) | 指定されたインデックスにあるコンポーネントを削除します。 |
| RemoveRange(int fromIndex, int toIndex) | このリストから、インデックスが fromIndex (両端を含む) と toIndex (両端を含まない) の間にあるすべての要素を削除します。 |
| 全て保持(コレクションc) | 指定されたコレクションに含まれるこの Vector の要素のみを保持します。 |
| set(int インデックス, オブジェクト o) | この Vector 内の指定された位置にある要素を、指定された要素に置き換えます。 |
| setElementAt(オブジェクト o, int インデックス) | このベクトルの指定されたインデックスにあるコンポーネントを、指定されたオブジェクトに設定します。 |
| setSize(int newSize) | このベクトルのサイズを設定します。 |
| サイズ() | このベクトル内のコンポーネントの数を返します。 |
| subList(int fromIndex, int toIndex) | この List の fromIndex (これを含む) と toIndex (これを含まない) の間の部分のビューを返します。 |
| toArray() | この Vector のすべての要素を正しい順序で含む配列を返します。 |
| toArray(オブジェクト []配列) | この Vector のすべての要素を正しい順序で含む配列を返します。ランタイム 返される配列の型は、指定された配列の型です。 |
| toString() | 各要素の文字列表現を含む、この Vector の文字列表現を返します。 |
| トリムサイズ() | このベクトルの容量をトリミングして、ベクトルの現在のサイズにします。 |
を優先的に使用する 何について スタック上 -:
Java の Stack クラスはレガシー クラスであり、 Java のベクトル 。これはスレッドセーフなクラスであるため、スレッドセーフが必要ない場合にはオーバーヘッドが発生します。使用することをお勧めします ArrayDeque シングルスレッド環境ではより効率的であるため、スタック実装に最適です。
ジャワ
// A Java Program to show implementation> // of Stack using ArrayDeque> import> java.util.*;> class> GFG {> >public> static> void> main (String[] args) {> >Deque stack =>new> ArrayDeque();> >stack.push(>'A'>);> >stack.push(>'B'>);> >System.out.println(stack.peek());> >System.out.println(stack.pop());> >}> }> |
>
Javaの文字列を逆にする
>
出力:
B B>
スタックではなく Deque を使用するもう 1 つの理由は、Deque には LIFO の概念を適用したままリストに変換するストリームを使用できる一方で、スタックには適用されないことです。
ジャワ
import> java.util.*;> import> java.util.stream.Collectors;> class> GFG {> >public> static> void> main (String[] args) {> > >Stack stack =>new> Stack();> >Deque deque =>new> ArrayDeque();> >stack.push(>1>);>//1 is the top> >deque.push(>1>);>//1 is the top> >stack.push(>2>);>//2 is the top> >deque.push(>2>);>//2 is the top> >List list1 = stack.stream().collect(Collectors.toList());>//[1,2]> >System.out.println(>'Using Stack -'>);> >for>(>int> i =>0>; i System.out.print(list1.get(i) + ' ' ); } System.out.println(); List list2 = deque.stream().collect(Collectors.toList());//[2,1] System.out.println('Using Deque -'); for(int i = 0; i System.out.print(list2.get(i) + ' ' ); } System.out.println(); } }> |
>
>出力
Using Stack - 1 2 Using Deque - 2 1>