Java
でのLinked List
データ構造の作成方法
要素のコレクションを効果的に管理するデータ構造を作成することは、プログラミングにおいて挑戦となる場合があります。最も一般的に使用される構造の1つがLinked List
です。このブログ記事では、Java標準ライブラリに組み込まれたクラスがすでに存在していても、Java
でのLinked List
の作成プロセスを説明します。
問題の理解
データ構造と聞くと、配列を思い浮かべるかもしれませんが、時には配列が限界になることがあります。ここでLinked List
が登場します。Linked List
を使用すると、配列を再サイズすることなく、要素を効率的に挿入および削除できます。これは、各ノードがデータと次のノードへの参照を含むノードのシーケンスから成り立っています。
組み込みオプション
Javaには、java.util
パッケージ内に組み込まれたLinkedList
クラスがあり、多くの状況において便利で適していることが知られています。しかし、自分自身の実装を作成できることは、理解を深め、データ構造の動作をより制御できるようになります。
自作のLinked List
の作成
以下に、自分自身のシンプルなLinked List
をゼロから構築する方法を探ります。このチュートリアルでは、ノードを先頭から挿入および削除できる単方向リンクリストに焦点を当てます。
ステップ1: Linkクラスの定義
まず、リスト内の各要素を表すLink
クラスを作成する必要があります。コードは以下のようになります。
class Link {
public int data1;
public double data2;
public Link nextLink;
// Linkコンストラクタ
public Link(int d1, double d2) {
data1 = d1;
data2 = d2;
}
// Linkデータを表示
public void printLink() {
System.out.print("{" + data1 + ", " + data2 + "} ");
}
}
ステップ2: LinkListクラスの定義
次に、リスト全体を表すクラスが必要です。
class LinkList {
private Link first;
// LinkListコンストラクタ
public LinkList() {
first = null;
}
// リストが空であればtrueを返す
public boolean isEmpty() {
return first == null;
}
// リストの先頭に新しいLinkを挿入
public void insert(int d1, double d2) {
Link link = new Link(d1, d2);
link.nextLink = first;
first = link;
}
// リストの先頭からリンクを削除
public Link delete() {
Link temp = first;
if (first == null) {
return null; // または例外を投げる
}
first = first.nextLink;
return temp;
}
// リスト内の全リンクを表示
public void printList() {
Link currentLink = first;
System.out.print("リスト: ");
while (currentLink != null) {
currentLink.printLink();
currentLink = currentLink.nextLink;
}
System.out.println("");
}
}
ステップ3: LinkListのテスト
最後に、Linked List
をテストするためのメインメソッドを実装します。
class LinkListTest {
public static void main(String[] args) {
LinkList list = new LinkList();
// いくつかの要素を挿入
list.insert(1, 1.01);
list.insert(2, 2.02);
list.insert(3, 3.03);
list.insert(4, 4.04);
list.insert(5, 5.05);
// リストを表示
list.printList();
// 要素を削除
while (!list.isEmpty()) {
Link deletedLink = list.delete();
System.out.print("削除された: ");
deletedLink.printLink();
System.out.println("");
}
list.printList();
}
}
結論
このブログ記事では、Java
でカスタムLinked List
を作成する方法を探求し、ノードの挿入、削除、表示に必要なメソッドを実装しました。Javaの標準ライブラリでのネイティブLinkedList
クラスは多くのアプリケーションで十分かもしれませんが、自分自身のものを実装することは、プログラミングスキルを向上させる素晴らしい経験になるでしょう。
更なる拡張
この基本的な実装をマスターした後、以下のような機能を追加することを検討してください。
- 双方向リンクリスト:各ノードが次と前のノードへの参照を持つようにします。
- 中間/末尾の挿入/削除:さまざまな位置からノードを追加または削除するメソッド。
- 取得とソートメソッド:特定の要素を取得したり、リンクリストをソートしたりする関数。
これらの拡張に慣れることで、あなたのスキルを次のレベルへと引き上げることができます。楽しいコーディングを!