JavaのList型とは!?ArrayListの使い方を基礎の基礎から解説!

JavaにはListという配列よりも便利な型がありますが、

使い方がよくわからない……
どんなときに使えばいいの?
ArraListって何?

など疑問を持っている方も多いのではないでしょうか?

そこで、この記事ではListについて、以下の内容で解説していきます!

  • 【基礎】List型オブジェクトの宣言と初期化
  • 【基礎】ループを使った要素へのアクセス
  • 【基礎】Listのメソッドの使い方
  • 【発展】Listの要素をソートする方法
  • 【発展】Listと他のコレクションとの変換方法

今回はListについて、わかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

List型オブジェクトの宣言と初期化

まず初めに空のList型オブジェクトの作り方を解説します!

List<データ型名> オブジェクト名 = new ArrayList<データ型名>();

List型のオブジェクトにはArrayListクラスなどで生成したインスタンスを格納します。インスタンスを生成する際には、new演算子を用います。

例えばString型の要素をもつListの場合は、以下のように記述します。

List<String> list = new ArrayList<String>();

なお、List型オブジェクトの宣言と初期化の詳しい内容については、こちらを参考にしてくださいね。

【Java入門】Listの初期化(newとArrayListでの宣言とadd)
更新日:2024年3月29日

ループを使った要素へのアクセス

for文などのループ処理を使って要素へアクセスする方法について解説します。

iteratorを使ったfor文

Listインターフェースを実装するクラスでは、iteratorメソッドを使ってIterator型のオブジェクトを使用することができるようになります。

Iterator型のオブジェクトからはhasNextメソッドやnextメソッドを呼び出して利用できます。

hasNextメソッドは、リストが次の要素を持っている場合にtrueを返します。nextメソッドはリストの次の要素を返します。

Listインターフェースを実装するクラスには、例えばArrayListクラスなどがあります。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
 
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        
        for(Iterator it = list.iterator(); it.hasNext();) {
            System.out.println(it.next());
        }
    }

}

実行結果:

1
2
3
4

iteratorメソッドの使い方についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

【3分でわかるJavaの基礎】List内のデータをfor文で処理する方法(iterator)
更新日:2024年3月29日

forEachメソッド

Java8で追加されたforEachメソッドとラムダ式を使うと、リストの要素全てにアクセスする場合に簡潔に記述することができます。

import java.util.ArrayList;
import java.util.List;
 
public class Main {
 
    public static void main(String[] args) {
        List list = new ArrayList<>();
 
        list.add("a");
        list.add("b");
        list.add("c");
         
        // 拡張for文
        for(String s : list) {
            System.out.println(s);
        }
         
        // forEachメソッド
        list.forEach(System.out::println);
    }
 
}

実行結果:

a
b
c
a
b
c

forEachメソッドの使い方についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】Java8のforEachとラムダ式を配列、List、Mapで使う
更新日:2024年3月1日

Listのメソッドの使い方

Listインターフェースにはたくさんのメソッドが用意されています。メソッドを表にまとめました。

メソッド説明記述例
addリストに値を追加list.add(1)
addAllリストにリストを追加list1.add(list2)
setリストの値を変更list.set(0, 3)
getリストの値を取得list.get(0)
sizeリストの要素数を取得list.size()
indexOfリストから値の要素番号を取得list.indexOf(“a”)
subListリストから範囲を指定してコピーsubList(1, 3)
containsリストに値が含まれるか判定list.contains(“a”)
removeリストから指定する要素番号の値を削除list.remove(1);
distinctリストで重複する値を削除list.stream().distinct()
cloneリストのコピーlist.clone()

それぞれのメソッドの使い方についてみていきましょう。

add, addAllで要素を追加する方法

addメソッドはリストに値を追加する場合に使用します。

addAllメソッドはあるリストに別のリストを追加する場合に使用します。

import java.util.ArrayList;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
 
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(4);
        
        System.out.println(list1);
         
        List<Integer> list2 = new ArrayList<>();
         
        list2.add(5);
        list2.add(6);
        list2.add(7);
        list2.add(8);
         
        list1.addAll(list2);
        
        System.out.println(list1);
    }

}

実行結果:

[1, 2, 3, 4]
[1, 2, 3, 4, 5, 6, 7, 8]

addメソッド、addAllメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【3分でわかるJavaの基礎】Listにデータを追加する方法(add,addAll)
更新日:2024年3月29日

setで要素を書き換える方法

setメソッドはリストの要素を書き換える場合に使用します。

import java.util.ArrayList;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
 
        for(int i = 0; i < 5; i++) {
            list.add(i);
        }
         
        list.set(0, 3);
        
        System.out.println(list);
    }

}

実行結果:

[3, 1, 2, 3, 4]

setメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】簡単!Listクラスのsetメソッドの使い方
更新日:2024年3月1日

getで要素の値を取得する方法

getメソッドは要素の値を取得する場合に使用します。

import java.util.ArrayList;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
 
        //listにデータ追加する
        list.add("apple");
        list.add("orange");
        list.add("melon");
        
        System.out.println(list.get(0));
    }

}

実行結果:

apple

getメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【3分でわかるJavaの基礎】Listのデータを取得する方法(get)
更新日:2024年3月1日

sizeで要素数を取得する方法

sizeメソッドはリストの要素数を取得する場合に使用します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
 
        System.out.println("list = " + list);
        System.out.println("要素数 = " + list.size());
    }

}

実行結果:

list = [s, a, m, u, r, a, i]
要素数 = 7

sizeメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【3分Java入門】Listのsizeメソッドで要素数を知る!
更新日:2024年3月1日

indexOfで要素の位置を検索する方法

indexOfメソッドは指定した値がリスト内のどこに位置するか検索する場合に使用します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
 
        int index = list.indexOf("a");
        
        System.out.println("要素番号 = " + index);
    }

}

実行結果:

要素番号 = 1

indexOfメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】indexOfとlastIndexOfで文字列を検索する(List/String)
更新日:2024年3月29日

subListでListの一部をコピーする方法

subListはリスト内の範囲を指定し、範囲内のリストで新しいリストを作成する場合に使用します。

import java.util.ArrayList;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<Integer> mainList = new ArrayList<>();
        
        mainList.add(0);
        mainList.add(1);
        mainList.add(2);
        mainList.add(3);
        mainList.add(4);
         
        List<Integer> sbList = mainList.subList(1, 3);
        
        System.out.println(sbList);
    }

}

実行結果:

[1, 2]

subListメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】ListをsubListで切り出して新しいListを作る方法
更新日:2024年3月1日

containsで要素の有無を確認する方法

containsメソッドは指定した値がリスト内にあるかないか判定する場合に使用します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = new ArrayList<String>(Arrays.asList("e", "n", "g", "i", "n", "e", "e", "r"));
        List<String> listC = new ArrayList<String>();
                
        for(String a : listA) {
            if(listB.contains(a)) {
            listC.add(a);
            }
        }
        
        System.out.println("ListC = " + listC);
    }

}

実行結果:

ListC = [r, i]

containsメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】Listの要素をremove、removeAllで削除する方法
更新日:2024年3月1日

removeで要素を削除する方法

removeメソッドは要素を削除する場合に使用します。

import java.util.ArrayList;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<String> array = new ArrayList<>();
        array.add("侍");
        array.add("samurai");
        array.add("さむらい");
        array.add("サムライ");
        
        array.remove(1);
        
        System.out.println(array);
    }

}

実行結果:

[侍, さむらい, サムライ]

removeメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】Listの要素をremove、removeAllで削除する方法
更新日:2024年3月1日

distinctで重複する要素を取り除く方法

distinctメソッドはJava8から追加されたStream APIです。

リスト内の重複する要素を取り除く場合に使用します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<String> listA = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        
        listA.stream().distinct().forEach(System.out::print);
    }

}

実行結果:

samuri

distinctメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【3分Java入門】Listで重複するデータを取り除く方法
更新日:2024年3月1日

cloneでListの全てをコピーする方法

cloneメソッドはリストのすべてをコピーする場合に使用します。

import java.util.ArrayList;

public class Main {
 
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        list1.add("c");
         
        ArrayList<String> list2 = (ArrayList<String>)list1.clone();
        
        System.out.println(list2);
    }

}

実行結果:

[a, b, c]

cloneメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】Listのコピーとcloneメソッドの使い方
更新日:2024年3月1日

Listの要素をソートする方法

リスト内の要素を順番に並べ替える場合には、Collectionsクラスのsortメソッドを使用します。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
 
        list.add(10);
        list.add(30);
        list.add(5);
        list.add(2);
        list.add(11);
        list.add(90);
         
        System.out.println(list);
        
        Collections.sort(list);
        
        System.out.println(list);
    }

}

実行結果:

[10, 30, 5, 2, 11, 90]
[2, 5, 10, 11, 30, 90]

リストの要素をソートする方法についての詳しい解説は、こちらを参考にしてくださいね。

【Java入門】配列やListをソートする方法(文字列もソート)
更新日:2024年3月29日

Listと他のコレクションとの変換方法

Listと他のコレクションとの相互変換についてみていきましょう。

配列とListの相互変換

配列からListに変換する場合は、ArraysクラスのasListメソッドを使用します。

Listから配列に変換する場合は、ListインターフェースのtoArrayメソッドを使用します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
 
    public static void main(String[] args) {
        // 配列からListへの変換
        String[] array1 = {"s", "a", "m", "u", "r", "a", "i"};
        List<String> list1 = Arrays.asList(array1);
         
        System.out.println(list1);
        
        // Listから配列への変換
        List<String> list2 = new ArrayList<>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        String[] array2 = list2.toArray(new String[list2.size()]);
        
        for(String s: array2) {
            System.out.println(s);
        }
    }

}

実行結果:

[s, a, m, u, r, a, i]
s
a
m
u
r
a
i

配列とListの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】List⇔配列の相互変換は”toArray”と”asList”でOK!
更新日:2024年3月1日

ListとSetの相互変換

それぞれのインスタンスを生成する際にコンストラクタの引数に変換前のオブジェクトを指定することで変換することができます。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
 
    public static void main(String[] args) {
        // ListからSetへの変換
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(1);
         
        Set<Integer> set1 = new HashSet<>(list1);
         
        System.out.println(set1);
        
        // SetからListへの変換
        Set<Integer> set2 = new HashSet<>();
        set2.add(1);
        set2.add(2);
        set2.add(3);
         
        List<Integer> list2 = new ArrayList<>(set2);
        
        System.out.println(list2);
    }

}

実行結果:

[1, 2, 3]
[1, 2, 3]

ListとSetの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】ListとSetクラスの変換・違いまとめ
更新日:2024年3月1日

ListとMapの相互変換

ListからMapへ変換する場合は、Java8から追加されたStream APIのcollectメソッドを使うと簡潔に記述することができて便利です。

MapからListに変換する場合は、Listの要素にMapの値を変換する場合とキーを変換する場合とで使うメソッドが異なります。

値を変換する場合はvaluesメソッドを、キーを変換する場合はkeySetメソッドを使用します。

import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
 
    public static void main(String[] args) {
        // ListからMapへの変換
        List<String> list = new ArrayList<>(Arrays.asList("chocolate", "makaron", "cheesecake", "pudding", "cookie", "pancake"));
     
        Map<String, Integer> map1 = list.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
     
        System.out.println(map1);
        
        // MapからListへの変換
        Map map2 = new HashMap(); 
        map2.put("Samurai", "Engineer");
        map2.put("Soldier", "Warrior");
         
        List<String> listValues = new ArrayList<>(map2.values());
         
        List<String> listKeys = new ArrayList<>(map2.keySet());
        
        System.out.println(listValues);
        System.out.println(listKeys);
    }

}

実行結果:

{cookie=6, cheesecake=10, pancake=7, makaron=7, pudding=7, chocolate=9}
[Warrior, Engineer]
[Soldier, Samurai]

ListとMapの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

【Java入門】List⇔Map変換でJava8のStreamを使う方法
更新日:2024年3月1日

ListとArrayListの違い

ListとArrayListは混同されることが多いので、違いについて解説します。大きな違いはListはインターフェースで、ArrayListはListを実装したクラスになります。

インターフェースはオブジェクトの型として宣言時に使うことはできますが、インスタンスを生成することはできません。

以下のような記述は可能です。

List<データ型> オブジェクト名 = new ArrayList<>();

Listは左辺のようにオブジェクトの宣言時に型として使用することはできますが、右辺でnew句を使ってインスタンスを生成する場合には使用することはできません。

new句を使ってインスタンスを生成する場合は、ArrayListなどのListを実装したクラスがよく使われます。ちなみに、ArrayListはオブジェクトの宣言時の型として使用することももちろん可能です。

ではオブジェクトの宣言時にList型で宣言するのがいいのか、ArrayList型で宣言するのがいいのかどのように使い分けたらいいのでしょうか?

どちらも使い方によってメリット、デメリットがあります。詳しくはこちらを参考にしてください。

Javaのコレクションクラスまとめ(ListとArrayListの違いも解説)
更新日:2024年3月29日

まとめ

いかがでしたか?

よく使うメソッドからあまり見かけないメソッド、新しいメソッドなど多くのメソッドを解説してきました。これらのメソッドの使い方を覚えることでJavaのListを使いこなすことが出来るようになります。

もし、Listについて忘れてしまったらこの記事を思い出してくださいね!

この記事を書いた人

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

目次