ホームページ >Java >&#&チュートリアル >Java のキュー データ構造の完全ガイド
コードウォリアーの皆さん、ようこそ!今日、私たちはキューの世界への壮大な旅に出発しようとしています。お気に入りのコーヒーを買うために列に並んだり、テーマパークのチケットを持って待っていることを想像してみてください。それがまさに行列ですが、カフェインは大幅に減り、子供たちの叫び声はありません。あなたが新人の開発者であっても、熟練したコードマジシャンであっても、シートベルトを締めて、キューに関するあらゆることをマスターする準備をしてください。深く潜ってみましょう!
キューは、先入れ先出し (FIFO) 原則に従う線形データ構造です。現実世界の行列と同じように、最初に列に加わった人が最初にサービスを受けられます。プログラミング用語では、キューに追加された最初の要素が最初に削除されます。
オーダーの保存 : 到着したのと同じ順序で処理する必要があるタスク。
公平性 : プロセスは平等に扱われ、飢餓を防ぎます。
並列処理 : タスクのスケジュール、ジョブの印刷、データ バッファリングなどのシナリオで役立ちます。
使用例の例 :
オペレーティング システムの CPU スケジューリング。
Web サーバーでのリクエストの処理。
グラフ走査における BFS (幅優先検索)。
キューは 2 つの操作を伴う一方通行であると考えてください。
エンキュー (追加) : 行の末尾に項目を追加します。
デキュー (削除) : 項目を前から削除します。
**Java のキュー データ構造の完全ガイド*
コード戦士の皆さん、ようこそ!今日、私たちはキューの世界への壮大な旅に乗り出そうとしています。お気に入りのコーヒーを買うために列に並んだり、テーマパークのチケットを持って待っていることを想像してみてください。それがまさに行列ですが、カフェインは大幅に減り、子供たちの叫び声はありません。あなたが新人の開発者であっても、熟練したコードマジシャンであっても、シートベルトを締めて、キューに関するあらゆることをマスターする準備をしてください。深く潜ってみましょう!
キューは、先入れ先出し (FIFO) 原則に従う線形データ構造です。現実世界の行列と同じように、最初に列に加わった人が最初にサービスを受けられます。プログラミング用語では、キューに追加された最初の要素が最初に削除されます。
オーダーの保存 : 到着したのと同じ順序で処理する必要があるタスク。
公平性 : プロセスは平等に扱われ、飢餓を防ぎます。
並列処理 : タスクのスケジュール、ジョブの印刷、データ バッファリングなどのシナリオで役立ちます。
使用例の例 :
オペレーティング システムの CPU スケジューリング。
Web サーバーでのリクエストの処理。
グラフ走査における BFS (幅優先検索)。
キューは 2 つの操作を伴う一方通行であると考えてください。
エンキュー (追加) : 行の末尾に項目を追加します。
デキュー (削除) : 項目を前から削除します。
注: 空のキューから削除しようとした場合は、おめでとうございます。***Java のキュー データ構造の完全ガイド*
コード戦士の皆さん、ようこそ!今日、私たちはキューの世界への壮大な旅に乗り出そうとしています。お気に入りのコーヒーを買うために列に並んだり、テーマパークのチケットを持って待っていることを想像してみてください。それがまさに行列ですが、カフェインは大幅に減り、子供たちの叫び声はありません。あなたが新人の開発者であっても、熟練したコードマジシャンであっても、シートベルトを締めて、キューに関するあらゆることをマスターする準備をしてください。深く潜ってみましょう!
キューは、先入れ先出し (FIFO) 原則に従う線形データ構造です。現実世界の行列と同じように、最初に列に加わった人が最初にサービスを受けられます。プログラミング用語では、キューに追加された最初の要素が最初に削除されます。
オーダーの保存 : 到着したのと同じ順序で処理する必要があるタスク。
公平性 : プロセスは平等に扱われ、飢餓を防ぎます。
並列処理 : タスクのスケジュール、ジョブの印刷、データ バッファリングなどのシナリオで役立ちます。
使用例の例 :
オペレーティング システムの CPU スケジューリング。
Web サーバーでのリクエストの処理。
グラフ走査における BFS (幅優先検索)。
キューは 2 つの操作を伴う一方通行であると考えてください。
エンキュー (追加) : 行の末尾に項目を追加します。
デキュー (削除) : 項目を前から削除します。
注: 空のキューから削除しようとした場合は、おめでとうございます。恐ろしい EmptyQueueException** に遭遇したことになります !*
キューはさまざまな方法で表すことができます:
Linear Queue : フロント ポインターとリア ポインターがキューの開始と終了を追跡する単純な配列。
循環キュー : 終端を始端に接続してスペースを最適化することで、線形キューの制限を克服します。
メモリレイアウト :
配列ベースのキュー : 連続したメモリ ブロックを使用します。
リンクリストベースのキュー : 相互にポイントするノードを使用し、動的なサイジングを可能にします。
頭が混乱しすぎないようにしましょう!さまざまなタイプを簡単にまとめます:
***Java のキュー データ構造の完全ガイド*
コード戦士の皆さん、ようこそ!今日、私たちはキューの世界への壮大な旅に乗り出そうとしています。お気に入りのコーヒーを買うために列に並んだり、テーマパークのチケットを持って待っていることを想像してみてください。それがまさに行列ですが、カフェインは大幅に減り、子供たちの叫び声はありません。あなたが新人の開発者であっても、熟練したコードマジシャンであっても、シートベルトを締めて、キューに関するあらゆることをマスターする準備をしてください。深く潜ってみましょう!
キューは、先入れ先出し (FIFO) 原則に従う線形データ構造です。現実世界の行列と同じように、最初に列に加わった人が最初にサービスを受けられます。プログラミング用語では、キューに追加された最初の要素が最初に削除されます。
オーダーの保存 : 到着したのと同じ順序で処理する必要があるタスク。
公平性 : プロセスは平等に扱われ、飢餓を防ぎます。
並列処理 : タスクのスケジュール、ジョブの印刷、データ バッファリングなどのシナリオで役立ちます。
使用例の例 :
オペレーティング システムの CPU スケジューリング。
Web サーバーでのリクエストの処理。
グラフ走査における BFS (幅優先検索)。
キューは 2 つの操作を伴う一方通行であると考えてください。
エンキュー (追加) : 行の末尾に項目を追加します。
デキュー (削除) : 項目を前から削除します。
**Java のキュー データ構造の完全ガイド*
コード戦士の皆さん、ようこそ!今日、私たちはキューの世界への壮大な旅に乗り出そうとしています。お気に入りのコーヒーを買うために列に並んだり、テーマパークのチケットを持って待っていることを想像してみてください。それがまさに行列ですが、カフェインは大幅に減り、子供たちの叫び声はありません。あなたが新人の開発者であっても、熟練したコードマジシャンであっても、シートベルトを締めて、キューに関するあらゆることをマスターする準備をしてください。深く潜ってみましょう!
キューは、先入れ先出し (FIFO) 原則に従う線形データ構造です。現実世界の行列と同じように、最初に列に加わった人が最初にサービスを受けられます。プログラミング用語では、キューに追加された最初の要素が最初に削除されます。
オーダーの保存 : 到着したのと同じ順序で処理する必要があるタスク。
公平性 : プロセスは平等に扱われ、飢餓を防ぎます。
並列処理 : タスクのスケジュール、ジョブの印刷、データ バッファリングなどのシナリオで役立ちます。
使用例の例 :
オペレーティング システムの CPU スケジューリング。
Web サーバーでのリクエストの処理。
グラフ走査における BFS (幅優先検索)。
キューは 2 つの操作を伴う一方通行であると考えてください。
エンキュー (追加) : 行の末尾に項目を追加します。
デキュー (削除) : 項目を前から削除します。
注: 空のキューから削除しようとした場合は、おめでとうございます。***Java のキュー データ構造の完全ガイド*
コード戦士の皆さん、ようこそ!今日、私たちはキューの世界への壮大な旅に乗り出そうとしています。お気に入りのコーヒーを買うために列に並んだり、テーマパークのチケットを持って待っていることを想像してみてください。それがまさに行列ですが、カフェインは大幅に減り、子供たちの叫び声はありません。あなたが新人の開発者であっても、熟練したコードマジシャンであっても、シートベルトを締めて、キューに関するあらゆることをマスターする準備をしてください。深く潜ってみましょう!
キューは、先入れ先出し (FIFO) 原則に従う線形データ構造です。現実世界の行列と同じように、最初に列に加わった人が最初にサービスを受けられます。プログラミング用語では、キューに追加された最初の要素が最初に削除されます。
オーダーの保存 : 到着したのと同じ順序で処理する必要があるタスク。
公平性 : プロセスは平等に扱われ、飢餓を防ぎます。
並列処理 : タスクのスケジュール、ジョブの印刷、データ バッファリングなどのシナリオで役立ちます。
使用例の例 :
オペレーティング システムの CPU スケジューリング。
Web サーバーでのリクエストの処理。
グラフ走査における BFS (幅優先検索)。
キューは 2 つの操作を伴う一方通行であると考えてください。
エンキュー (追加) : 行の末尾に項目を追加します。
デキュー (削除) : 項目を前から削除します。
注: 空のキューから削除しようとした場合は、おめでとうございます。恐ろしい EmptyQueueException** に遭遇したことになります !*
キューはさまざまな方法で表すことができます:
Linear Queue : フロント ポインターとリア ポインターがキューの開始と終了を追跡する単純な配列。
循環キュー : 終端を始端に接続してスペースを最適化することで、線形キューの制限を克服します。
メモリレイアウト :
配列ベースのキュー : 連続したメモリ ブロックを使用します。
リンクリストベースのキュー : 相互にポイントするノードを使用し、動的なサイジングを可能にします。
頭が混乱しすぎないようにしましょう!さまざまなタイプを簡単にまとめます:
キュー インターフェイスを使用した基本的なキューの実装** :
import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); // Enqueue operations queue.offer("Alice"); queue.offer("Bob"); queue.offer("Charlie"); // Peek and Dequeue operations System.out.println("Front of the queue: " + queue.peek()); // Alice System.out.println("Removing: " + queue.poll()); // Alice System.out.println("Next front: " + queue.peek()); // Bob } }
Java での一般的なキューの実装 :
LinkedList (キューとして): キュー インターフェイスを実装します。
PriorityQueue : 優先度ベースのキューを実装します。
ArrayDeque : FIFO と LIFO の両方で効率的です。
循環キューの例 :
class CircularQueue { private int[] queue; private int front, rear, size; public CircularQueue(int capacity) { queue = new int[capacity]; front = 0; rear = -1; size = 0; } public void enqueue(int value) { if (size == queue.length) throw new IllegalStateException("Queue is full"); rear = (rear + 1) % queue.length; queue[rear] = value; size++; } public int dequeue() { if (size == 0) throw new IllegalStateException("Queue is empty"); int value = queue[front]; front = (front + 1) % queue.length; size--; return value; } }
poll() : キューの先頭を削除して返します。空の場合は null を返します。
peek() : ヘッドを削除せずに返します。空の場合は null。
isEmpty() : キューが空かどうかを確認します。
size() : 要素の数を返します。
1.幅優先検索 (BFS) アルゴリズム :
BFS はノードをレベルごとに調査します。これは、重み付けされていないグラフで最短経路を見つけるための頼りになるものです。
BFS の例 :
import java.util.*; public class BFSExample { public static void bfsTraversal(int start, Map<Integer, List<Integer>> graph) { Queue<Integer> queue = new LinkedList<>(); Set<Integer> visited = new HashSet<>(); queue.offer(start); visited.add(start); while (!queue.isEmpty()) { int node = queue.poll(); System.out.println("Visited node: " + node); for (int neighbor : graph.getOrDefault(node, Collections.emptyList())) { if (!visited.contains(neighbor)) { visited.add(neighbor); queue.offer(neighbor); } } } } }
2.二分木のレベル順序トラバーサル :
public void levelOrderTraversal(TreeNode root) { if (root == null) return; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode current = queue.poll(); System.out.print(current.val + " "); if (current.left != null) queue.offer(current.left); if (current.right != null) queue.offer(current.right); } }
最大-最小スライディング ウィンドウ問題には Deque を使用します : O(n) 個の解に対して効率的です。
2 つのスタックのトリック : 最適化されたエンキュー/デキュー操作のために 2 つのスタックを使用してキューを実装します。
循環キューの実装 : 線形キューでのメモリの浪費を回避します。
問題例: 2 つのスタックを使用したキューの実装 :
import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); // Enqueue operations queue.offer("Alice"); queue.offer("Bob"); queue.offer("Charlie"); // Peek and Dequeue operations System.out.println("Front of the queue: " + queue.peek()); // Alice System.out.println("Removing: " + queue.poll()); // Alice System.out.println("Next front: " + queue.peek()); // Bob } }
先入れ先出しロジック : 問題が同じ順序で処理する必要がある場合は、要素が入ります。
レベルごとのトラバーサル : バイナリ ツリー、グラフ。
バッファリング : ライブ ストリームの処理またはユーザー リクエストの処理。
幅方向の検索 : 最短パスまたは近傍の探索を必要とする問題。
エッジケースを理解する : 空のキュー、満杯のキュー、循環動作。
さまざまなキュー タイプをマスターします : シンプル、循環、優先順位、およびデキュー。
スペースと時間を最適化します : 動的キューにはリンク リストを使用し、固定サイズ キューには配列を使用します。
ここまでで、Java でキュー関連のあらゆることに取り組む準備が整ったはずです。さまざまな実装によるキューの作成から複雑なアルゴリズムでの使用に至るまで、キューは単純なアプリケーションと複雑なアプリケーションの両方で要素の公平で順序付けられた処理を保証する上で重要な役割を果たします。優れたプログラマーはキューがどのように機能するかを知っていますが、優れたプログラマーはキューがなぜ機能するか、いつ使用するかを知っています。練習を続けてください。そうすれば、コーディングのキューが常に整理整頓されますように!
以上がJava のキュー データ構造の完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。