Java の二重リンクリスト

Hiten Kanwar 2023年10月12日
Java の二重リンクリスト

リンクリストでは、すべての要素がデータ部分とアドレス部分を持つ個別のオブジェクトとして機能します。データを保存するために伝染性のメモリ位置を使用しません。二重リンクリストには、前のノードと次のノードのアドレスが格納されます。2つのアドレスノードがあると、二重リンクリストが両方向にトラバースできます。

このチュートリアルでは、Java のリンクリストについて説明します。

Java では、リンクリストクラスは Java のコレクションフレームワークの一部であり、二重リンクリストとして機能するリンクリストデータ構造の機能を提供します。

ここでの各要素は、単一の位置にある PrevNext、および Data の 3つの値で構成されるノードとして機能します。Prev は前の要素へのアドレスを格納し、Next は次の要素へのアドレスを格納し、Data はノードの実際のデータを格納します。

例えば、

import java.util.*;
public class ABC {
  public static void main(String[] args) {
    LinkedList<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("orange");
    fruits.add("mango");
    System.out.println("LinkedList: " + fruits);
  }
}

出力:

LinkedList: [apple, orange, mango]

上記の例では、Java のコレクションフレームワークを介してリンクリストを正常に作成しました。

ここで、最初のノードには apple というデータがあり、前のノードとして null 値を保持し、次のノードとしてオレンジのアドレスを保持しています。同様に、データがオレンジの 2 番目の要素には、前のアップルのアドレスと次のマンゴーのアドレスがあります。

新しい要素が追加されるたびに、Prev および Next アドレスが内部で自動的に更新されます。

get() メソッドは、リンクリストから要素にアクセスするために使用されます。リンクリストは、最初から要素まで繰り返します。コンポーネントにアクセスするための listIterator() メソッドもあります。next() および previous() 関数は、リストを両方向にトラバースするのに役立ちます。

さらに、set() メソッドを使用して、リンクリスト要素を変更できます。remove() 関数は要素を削除できます。

次の例では、これらの関数の一部を使用します。

import java.util.*;
public class ABC {
  public static void main(String[] args) {
    LinkedList<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("orange");
    fruits.add("mango");
    String str = fruits.listIterator(1).previous();
    System.out.println("i like " + str);
  }
}

出力:

i like apple

上記の例では、previous() 関数を使用して、インデックス 1 の要素の前の値にアクセスしました。

データ変数とポインター変数を使用してクラスを作成し、Java で二重リンクリストをシミュレートすることもできます。

関連記事 - Java Linked List