Java LinkedList get() メソッド
get()メソッドは Java のLinkedListクラスが提供する一般的なメソッドで、リンクリストから指定された位置の要素を取得するために使用されます。LinkedListJava コレクションフレームワークのListインターフェースの実装クラスであり、双方向リンクリストのデータ構造を使用して要素を格納します。
get()メソッドの基本構文は次のとおりです:
E get(int index)
ここで:
Eリンクリスト内の要素の型を表しますindex取得する要素の位置を表します(0 から始まります)
get() メソッドの動作原理
LinkedListのget()メソッドはリンクリストを走査して指定された位置の要素を取得します。なぜならLinkedListはリンクリストに基づいて実装されており、ArrayListとは異なり、インデックスを介して直接ランダムアクセスすることはできません。
呼び出し時get(index)、LinkedList次の処理を行います:
- インデックスが有効かどうかチェックします(0 ≤ index < size)
- リンクリストの先頭または末尾から走査を開始します(近い方の端から開始します)
- 指定された位置のノードを見つけるまで、ノードを1つずつ移動します
- そのノードに格納されている要素を返します
使用例
基本的な使い方
実例
public class LinkedListGetExample {
public static void main(String[] args) {
// LinkedList を作成する
LinkedList<String> fruits = new LinkedList<>();
// 要素を追加する
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
fruits.add("Durian");
// get() メソッドで要素を取得する
String firstFruit = fruits.get(0); // 最初の要素を取得する
String thirdFruit = fruits.get(2); // 3番目の要素を取得する
System.out.println("最初のフルーツ: " + firstFruit); // 出力: Apple
System.out.println("3番目のフルーツ: " + thirdFruit); // 出力: Cherry
}
}
LinkedList を走査する
実例
public class LinkedListTraversal {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
// get() メソッドを使用して LinkedList を走査する
for (int i = 0; i < numbers.size(); i++) {
System.out.println("第 " + i + " 番目の要素: " + numbers.get(i));
}
}
}
パフォーマンスの考慮事項
LinkedListのget()メソッドの時間計算量は O(n) です。指定された位置の要素を見つけるために、先頭または末尾からリンクリストを走査する必要があるためです。これはArrayListの O(1) 時間計算量とは対照的です。
したがって、要素に頻繁にランダムアクセスする必要がある場合は、ArrayListの方が良い選択かもしれません。一方、LinkedList頻繁な挿入・削除操作では、より良いパフォーマンスを発揮します。
例外処理
使用する場合get()メソッドのとき、渡されたインデックスが範囲外(index < 0 または index ≥ size)の場合、例外がスローされますIndexOutOfBoundsException。
安全に使用する例
実例
public class SafeGetExample {
public static void main(String[] args) {
LinkedList<String> colors = new LinkedList<>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");
int index = 3; // 範囲外のインデックス
try {
String color = colors.get(index);
System.out.println(color);
} catch (IndexOutOfBoundsException e) {
System.out.println("エラー: インデックス " + index + " が範囲外です。リストのサイズは " + colors.size());
}
}
}
代替メソッド
に加えてget()メソッド、LinkedList要素を取得する他のメソッドも提供しています:
getFirst(): 最初の要素を取得しますgetLast(): 最後の要素を取得しますpeek(): 最初の要素を取得しますが、削除しません(リストが空の場合は null を返します)peekFirst(): peek() と同じpeekLast(): 最後の要素を取得しますが、削除しません(リストが空の場合は null を返します)
例
実例
public class AlternativeMethods {
public static void main(String[] args) {
LinkedList<String> books = new LinkedList<>();
books.add("Java Programming");
books.add("Data Structures");
books.add("Algorithms");
System.out.println("最初の本: " + books.getFirst());
System.out.println("最後の本: " + books.getLast());
System.out.println("peek(): " + books.peek());
System.out.println("peekLast(): " + books.peekLast());
}
}
ベストプラクティス
get() メソッドを頻繁に使用するのを避けます:なぜなら
LinkedListのget()メソッドのパフォーマンスが低いため、頻繁にランダムアクセスする必要がある場合は、使用を検討しますArrayList。イテレータを使って走査する:走査する必要がある場合、
LinkedListイテレータを使用する方が、使用するよりもget()メソッドの方が効率的です:
実例
for (String fruit : fruits) {
System.out.println(fruit);
}
// またはイテレータを使用する
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
- インデックスの範囲を確認する:使用時
get()メソッドの前に、インデックスが有効かどうかを確認するのが最善です:
実例
return list.get(index);
} else {
// 無効なインデックスを処理する場合
}
まとめ
LinkedListのget()メソッドは、インデックスを介してリンクリスト内の要素にアクセスできるようにする、基本的でありながら重要なメソッドです。そのパフォーマンスはArrayListの対応するメソッドには劣りますが、特定のシナリオ(頻繁な挿入・削除など)ではLinkedList依然としてより良い選択肢です。理解get()メソッドの動作原理とパフォーマンス特性を理解することで、実際の開発においてより合理的なデータ構造の選択に役立ちます。
Java LinkedList