Java Stackクラス完全ガイド:使い方と主要メソッド
Java Stackクラス
Javaコレクションフレームワークには、クラシックなスタックデータ構造を実装したStackクラスが含まれています。公式Javaドキュメントによると、StackはVectorを継承しており、そのすべてのメソッドを継承しつつ、スタック固有の操作を追加しています。
Stackの実装
スタックは後入れ先出し(LIFO:Last In, First Out)の原則に従います:要素はトップにプッシュされ、トップからポップされます。以下の図はこの動作を示しています。

Stackの作成
スタックを作成するには、java.util.Stackをインポートし、目的のジェネリック型でインスタンス化します:
Stack<Type> stack = new Stack<>();
例:
// Integer型のスタック
Stack<Integer> intStack = new Stack<>();
// String型のスタック
Stack<String> stringStack = new Stack<>();
Stackのメソッド
継承されたVectorメソッドに加え、Stackは汎用コレクションとは異なる5つの専用操作を提供します。Vectorメソッドの完全なリストはVectorクラスのドキュメントを参照してください。
push()メソッド
push()メソッドは要素をスタックのトップに追加します。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
}
}
出力
Stack: [Dog, Horse, Cat]
pop()メソッド
pop()メソッドはスタックのトップにある要素を削除して返します。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("初期Stack: " + animals);
String removed = animals.pop();
System.out.println("削除された要素: " + removed);
}
}
出力
初期Stack: [Dog, Horse, Cat] 削除された要素: Cat
peek()メソッド
peek()メソッドは要素を削除せずにトップの要素を取得します。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
String top = animals.peek();
System.out.println("トップの要素: " + top);
}
}
出力
Stack: [Dog, Horse, Cat] トップの要素: Cat
search()メソッド
search()メソッドは、スタックのトップからの1ベースの位置を返し、存在しない場合は-1を返します。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
int pos = animals.search("Horse");
System.out.println("Horseの位置: " + pos);
}
}
出力
Stack: [Dog, Horse, Cat] Horseの位置: 2
empty()メソッド
empty()メソッドはスタックに要素があるかどうかを確認します。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
boolean isEmpty = animals.empty();
System.out.println("スタックは空ですか? " + isEmpty);
}
}
出力
Stack: [Dog, Horse, Cat] スタックは空ですか? false
Stackの代わりにArrayDequeを使用する
Stackはスタックを実装していますが、レガシーと見なされています。モダンなJavaコードでは、スタック機能のためにDequeインターフェースを実装するArrayDequeを推奨します。これはより良いパフォーマンスと明確なセマンティクスを提供するためです。詳細は以下を参照してください:
Java
- Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java継承のマスター:概念、種類、実践例
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ArrayList完全マスター:操作・メソッド・ベストプラクティス
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除