Java – Listの先頭に新しい要素を追加する方法
JavaでListの先頭に新しい要素を追加するには、LinkedListを使用するのが効率的です。
LinkedListはListインターフェースを実装しており、addFirst(E e)メソッドを使うことで先頭に要素を追加できます。
一方、ArrayListを使用する場合は、add(int index, E element)メソッドを利用してインデックス0に要素を挿入します。
ただし、ArrayListでは要素のシフトが発生するため、パフォーマンスに影響する可能性があります。
ArrayListで先頭に要素を追加する方法
JavaのArrayListは、可変長の配列を実現するクラスで、要素の追加や削除が容易です。
ArrayListの先頭に要素を追加するには、add(int index, E element)メソッドを使用します。
このメソッドを使うことで、指定したインデックスに要素を挿入することができます。
先頭に追加する場合は、インデックスを0に指定します。
以下に、ArrayListで先頭に要素を追加するサンプルコードを示します。
import java.util.ArrayList;
public class App {
    public static void main(String[] args) {
        // ArrayListのインスタンスを作成
        ArrayList<String> list = new ArrayList<>();
        // 初期要素を追加
        list.add("要素1");
        list.add("要素2");
        // 先頭に新しい要素を追加
        list.add(0, "新しい要素");
        // 結果を表示
        for (String element : list) {
            System.out.println(element);
        }
    }
}新しい要素
要素1
要素2このコードでは、最初にArrayListを作成し、2つの要素を追加しています。
その後、add(0, "新しい要素")を使って先頭に新しい要素を追加しています。
最後に、全ての要素を表示しています。
ArrayListは、要素の追加や削除が簡単で、特に先頭に要素を追加する際には便利です。
ただし、先頭に要素を追加すると、他の要素のインデックスが変更されるため、パフォーマンスに影響を与えることがあります。
LinkedListで先頭に要素を追加する方法
LinkedListは、要素をノードとして持つ双方向リストの実装で、要素の追加や削除が効率的に行えます。
LinkedListの先頭に要素を追加するには、addFirst(E e)メソッドを使用します。
このメソッドを使うことで、リストの先頭に新しい要素を簡単に追加できます。
以下に、LinkedListで先頭に要素を追加するサンプルコードを示します。
import java.util.LinkedList;
public class App {
    public static void main(String[] args) {
        // LinkedListのインスタンスを作成
        LinkedList<String> list = new LinkedList<>();
        // 初期要素を追加
        list.add("要素1");
        list.add("要素2");
        // 先頭に新しい要素を追加
        list.addFirst("新しい要素");
        // 結果を表示
        for (String element : list) {
            System.out.println(element);
        }
    }
}新しい要素
要素1
要素2このコードでは、最初にLinkedListを作成し、2つの要素を追加しています。
その後、addFirst("新しい要素")を使って先頭に新しい要素を追加しています。
最後に、全ての要素を表示しています。
LinkedListは、要素の追加や削除が頻繁に行われる場合に特に効果的です。
先頭に要素を追加する際も、addFirstメソッドを使用することで、効率的に操作が行えます。
LinkedListは、要素の挿入や削除がO(1)の時間で行えるため、大量のデータを扱う場合に適しています。
実装例:ArrayListとLinkedListの比較
ArrayListとLinkedListは、Javaのコレクションフレームワークで提供されるリストの実装ですが、それぞれ異なる特性を持っています。
以下では、両者の性能や使い方を比較するための実装例を示します。
特徴の比較表
| 特徴 | ArrayList | LinkedList | 
|---|---|---|
| データ構造 | 動的配列 | 双方向リスト | 
| 要素の追加 | O(1)(末尾の場合) | O(1)(先頭または末尾の場合) | 
| 要素の削除 | O(n) | O(1)(先頭または末尾の場合) | 
| インデックスアクセス | O(1) | O(n) | 
| メモリ使用 | 連続したメモリブロック | ノードごとにメモリを使用 | 
以下のコードでは、ArrayListとLinkedListの両方を使用して、同じ要素を追加し、先頭に新しい要素を追加する例を示します。
import java.util.ArrayList;
import java.util.LinkedList;
public class App {
    public static void main(String[] args) {
        // ArrayListのインスタンスを作成
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("要素1");
        arrayList.add("要素2");
        arrayList.add(0, "新しい要素"); // 先頭に追加
        // LinkedListのインスタンスを作成
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("要素1");
        linkedList.add("要素2");
        linkedList.addFirst("新しい要素"); // 先頭に追加
        // ArrayListの結果を表示
        System.out.println("ArrayListの要素:");
        for (String element : arrayList) {
            System.out.println(element);
        }
        // LinkedListの結果を表示
        System.out.println("LinkedListの要素:");
        for (String element : linkedList) {
            System.out.println(element);
        }
    }
}ArrayListの要素:
新しい要素
要素1
要素2
LinkedListの要素:
新しい要素
要素1
要素2このコードでは、ArrayListとLinkedListの両方に同じ要素を追加し、先頭に新しい要素を追加しています。
出力結果は同じですが、内部のデータ構造が異なるため、性能やメモリ使用量に違いがあります。
ArrayListは、インデックスアクセスが高速で、要素の追加が末尾の場合に効率的です。LinkedListは、要素の追加や削除が頻繁に行われる場合に適しており、特に先頭や末尾での操作が高速です。- 使用する場面に応じて、どちらのリストを選択するかを考慮することが重要です。
 
まとめ
この記事では、JavaにおけるArrayListとLinkedListの先頭に要素を追加する方法について解説しました。
両者の特性や性能の違いを理解することで、適切なデータ構造を選択する際の判断材料となるでしょう。
今後、実際のプログラミングにおいて、要件に応じて最適なリストを選び、効率的なコーディングを行ってみてください。