Java リンクリスト
Java LinkedList
このチュートリアルでは、例を使って Java LinkedList について詳しく学びます。
LinkedList
Java コレクション フレームワークのクラスは、リンク リスト データ構造 (二重リンク リスト) の機能を提供します。
リンク リストの各要素は ノード と呼ばれます . 3 つのフィールドで構成されています:
- 前へ - リスト内の前の要素のアドレスを格納します。
null
です 最初の要素 - 次へ - リスト内の次の要素のアドレスを格納します。
null
です 最後の要素 - データ - 実際のデータを保存します
Java LinkedList の作成
Java でリンク リストを作成する方法は次のとおりです。
LinkedList<Type> linkedList = new LinkedList<>();
ここで、タイプ リンクされたリストのタイプを示します。たとえば、
// create Integer type linked list
LinkedList<Integer> linkedList = new LinkedList<>();
// create String type linked list
LinkedList<String> linkedList = new LinkedList<>();
例:Java で LinkedList を作成する
import java.util.LinkedList;
class Main {
public static void main(String[] args){
// create linkedlist
LinkedList<String> animals = new LinkedList<>();
// Add elements to LinkedList
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
System.out.println("LinkedList: " + animals);
}
}
出力
LinkedList: [Dog, Cat, Cow]
上記の例では、LinkedList
を作成しました。 動物という名前 .
ここでは、add()
を使用しました LinkedList に要素を追加するメソッド。 add()
についてもっと学びましょう メソッドについては、このチュートリアルで後述します。
Java LinkedList の動作
リンクされたリストの要素は順番に保存されません。代わりに、リンクを介して分散して接続されています (前のページ そして次へ ).
<図>ここでは、リンクされたリストに 3 つの要素があります。
- 犬 - null を保持する最初の要素です 以前のアドレスと Cat のアドレスとして 次の住所として
- 猫 - Dog のアドレスを保持するのは 2 番目の要素です 以前のアドレスと Cow のアドレスとして 次の住所として
- 牛 - Cat のアドレスを保持する最後の要素です 以前のアドレスと null として 次の要素として
詳細については、LinkedList データ構造をご覧ください。
Java LinkedList のメソッド
LinkedList
リンクされたリストでさまざまな操作を実行できるようにするさまざまなメソッドを提供します。このチュートリアルでは、よく使用される 4 つの LinkedList 演算子について説明します。
- 要素を追加
- アクセス要素
- 要素を変更
- 要素を削除
1. LinkedList に要素を追加する
add()
を使用できます メソッドを使用して、LinkedList の末尾に要素 (ノード) を追加します。たとえば、
import java.util.LinkedList;
class Main {
public static void main(String[] args){
// create linkedlist
LinkedList<String> animals = new LinkedList<>();
// add() method without the index parameter
animals.add("Dog");
animals.add("Cat");
animals.add("Cow");
System.out.println("LinkedList: " + animals);
// add() method with the index parameter
animals.add(1, "Horse");
System.out.println("Updated LinkedList: " + animals);
}
}
出力
LinkedList: [Dog, Cat, Cow] Updated LinkedList: [Dog, Horse, Cat, Cow]
上記の例では、animals という名前の LinkedList を作成しました。 .ここでは、 add()
を使用しました animals に要素を追加するメソッド .
声明に注目してください、
animals.add(1, "Horse");
ここでは、インデックス番号を使用しています パラメータ。新しい要素を追加する位置を指定するオプションのパラメーターです。
LinkedList に要素を追加する方法の詳細については、Java プログラムを参照して LinkedList に要素を追加してください。
2. LinkedList 要素へのアクセス
get()
LinkedList クラスのメソッドを使用して、LinkedList から要素にアクセスします。たとえば、
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
LinkedList<String> languages = new LinkedList<>();
// add elements in the linked list
languages.add("Python");
languages.add("Java");
languages.add("JavaScript");
System.out.println("LinkedList: " + languages);
// get the element from the linked list
String str = languages.get(1);
System.out.print("Element at index 1: " + str);
}
}
出力
LinkedList: [Python, Java, JavaScript] Element at index 1: Java
上記の例では、get()
を使用しています。 パラメータ 1 を持つメソッド .ここで、メソッドはインデックス 1 の要素を返します .
iterator()
を使用して LinkedList の要素にアクセスすることもできます そして listIterator()
方法。詳細については、Java プログラムにアクセスして LinkedList の要素にアクセスしてください。
3. LinkedList の要素を変更する
set()
LinkedList
の方法 クラスは、LinkedList の要素を変更するために使用されます。たとえば、
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
LinkedList<String> languages = new LinkedList<>();
// add elements in the linked list
languages.add("Java");
languages.add("Python");
languages.add("JavaScript");
languages.add("Java");
System.out.println("LinkedList: " + languages);
// change elements at index 3
languages.set(3, "Kotlin");
System.out.println("Updated LinkedList: " + languages);
}
}
出力
LinkedList: [Java, Python, JavaScript, Java] Updated LinkedList: [Java, Python, JavaScript, Kotlin]
上記の例では、languages という名前の LinkedList を作成しました。行に注意してください、
languages.set(3, "Kotlin");
ここでは、set()
メソッドはインデックス 3 の要素を変更します コトリンへ .
4. LinkedList から要素を削除
remove()
LinkedList
のメソッド クラスは、LinkedList から要素を削除するために使用されます。たとえば、
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
LinkedList<String> languages = new LinkedList<>();
// add elements in LinkedList
languages.add("Java");
languages.add("Python");
languages.add("JavaScript");
languages.add("Kotlin");
System.out.println("LinkedList: " + languages);
// remove elements from index 1
String str = languages.remove(1);
System.out.println("Removed Element: " + str);
System.out.println("Updated LinkedList: " + languages);
}
}
出力
LinkedList: [Java, Python, JavaScript, Kotlin] Removed Element: Python New LinkedList: [Java, JavaScript, Kotlin]
ここでは、remove()
メソッドは、インデックス番号をパラメーターとして受け取ります。そして、インデックス番号で指定された要素を削除します。
リンクリストから要素を削除する方法の詳細については、リンクリストから要素を削除する Java プログラムにアクセスしてください..
その他の方法
メソッド | 説明 |
---|---|
contains() | LinkedList に要素が含まれているかどうかを確認します |
indexOf() | 要素が最初に出現したインデックスを返します |
lastIndexOf() | 要素が最後に出現したインデックスを返します |
clear() | LinkedList のすべての要素を削除します |
iterator() | LinkedList を反復処理する反復子を返します |
Deque および Queue としての LinkedList
LinkedList
以来 クラスは Queue および Deque インターフェースも実装しているため、これらのインターフェースのメソッドも実装できます。一般的に使用されるメソッドの一部を次に示します。
メソッド | 説明 |
---|---|
addFirst() | リンクされたリストの先頭に指定された要素を追加します |
addLast() | リンクされたリストの最後に指定された要素を追加します |
getFirst() | 最初の要素を返します |
getLast() | 最後の要素を返します |
removeFirst() | 最初の要素を削除します |
removeLast() | 最後の要素を削除します |
peek() | リンクされたリストの最初の要素 (head) を返します |
poll() | リンクされたリストから最初の要素を返し、削除します |
offer() | リンクされたリストの最後に指定された要素を追加します |
例:キューとしての Java LinkedList
import java.util.LinkedList;
import java.util.Queue;
class Main {
public static void main(String[] args) {
Queue<String> languages = new LinkedList<>();
// add elements
languages.add("Python");
languages.add("Java");
languages.add("C");
System.out.println("LinkedList: " + languages);
// access the first element
String str1 = languages.peek();
System.out.println("Accessed Element: " + str1);
// access and remove the first element
String str2 = languages.poll();
System.out.println("Removed Element: " + str2);
System.out.println("LinkedList after poll(): " + languages);
// add element at the end
languages.offer("Swift");
System.out.println("LinkedList after offer(): " + languages);
}
}
出力
LinkedList: [Python, Java, C] Accessed Element: Python Removed Element: Python LinkedList after poll(): [Java, C] LinkedList after offer(): [Java, C, Swift]
例:LinkedList を Deque として
import java.util.LinkedList;
import java.util.Deque;
class Main {
public static void main(String[] args){
Deque<String> animals = new LinkedList<>();
// add element at the beginning
animals.add("Cow");
System.out.println("LinkedList: " + animals);
animals.addFirst("Dog");
System.out.println("LinkedList after addFirst(): " + animals);
// add elements at the end
animals.addLast("Zebra");
System.out.println("LinkedList after addLast(): " + animals);
// remove the first element
animals.removeFirst();
System.out.println("LinkedList after removeFirst(): " + animals);
// remove the last element
animals.removeLast();
System.out.println("LinkedList after removeLast(): " + animals);
}
}
出力
LinkedList: [Cow] LinkedList after addFirst(): [Dog, Cow] LinkedList after addLast(): [Dog, Cow, Zebra] LinkedList after removeFirst(): [Cow, Zebra] LinkedList after removeLast(): [Cow]
LinkedList の繰り返し
Java の for-each ループを使用して、LinkedList を反復処理できます。たとえば、
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
// Creating a linked list
LinkedList<String> animals = new LinkedList<>();
animals.add("Cow");
animals.add("Cat");
animals.add("Dog");
System.out.println("LinkedList: " + animals);
// Using forEach loop
System.out.println("Accessing linked list elements:");
for(String animal: animals) {
System.out.print(animal);
System.out.print(", ");
}
}
}
出力
LinkedList: [Cow, Cat, Dog] Accessing linked list elements: Cow, Cat, Dog,
LinkedList 対。配列リスト
Java ArrayList と LinkedList
の両方 List
を実装します Collections
のインターフェース フレームワーク。ただし、それらの間にはいくつかの違いがあります。
LinkedList | ArrayList |
---|---|
List を実装 、 Queue 、および Deque インターフェイス。 | List を実装 |
3 つの値を保存します (以前のアドレス 、データ、 そして次のアドレス ) 1 つの位置に。 | 単一の位置に単一の値を格納します。 |
双方向リンク リストの実装を提供します。 | サイズ変更可能な配列実装を提供します。 |
要素が追加されるたびに、prev と next アドレスが変更されました。 | 要素が追加されるたびに、その位置以降のすべての要素がシフトされます。 |
要素にアクセスするには、最初から要素まで繰り返す必要があります。 | インデックスを使用して要素にランダムにアクセスできます。 |
注意 :Java のインターフェースを使用して LinkedList を作成することもできます。たとえば、
// create linkedlist using List
List<String> animals1 = new LinkedList<>();
// creating linkedlist using Queue
Queue<String> animals2 = new LinkedList<>();
// creating linkedlist using Deque
Deque<String> animals3 = new LinkedList<>();
ここで、LinkedList が 1 つのインターフェースを使用して作成された場合、他のインターフェースによって提供されるメソッドを使用することはできません。つまり、animals1 Queue
固有のメソッドは使用できません と Deque
Java