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クラスは多くのアプリケーションで十分かもしれませんが、自分自身のものを実装することは、プログラミングスキルを向上させる素晴らしい経験になるでしょう。

更なる拡張

この基本的な実装をマスターした後、以下のような機能を追加することを検討してください。

  • 双方向リンクリスト:各ノードが次と前のノードへの参照を持つようにします。
  • 中間/末尾の挿入/削除:さまざまな位置からノードを追加または削除するメソッド。
  • 取得とソートメソッド:特定の要素を取得したり、リンクリストをソートしたりする関数。

これらの拡張に慣れることで、あなたのスキルを次のレベルへと引き上げることができます。楽しいコーディングを!