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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)
更新日 : 2017年6月7日

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で使う
更新日 : 2019年5月4日

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)
更新日 : 2017年6月7日

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メソッドの使い方
更新日 : 2019年1月23日

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)
更新日 : 2019年5月23日

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メソッドで要素数を知る!
更新日 : 2019年6月4日

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)
更新日 : 2018年11月12日

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を作る方法
更新日 : 2017年12月8日

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で削除する方法
更新日 : 2019年3月30日

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で削除する方法
更新日 : 2019年3月30日

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で重複するデータを取り除く方法
更新日 : 2019年4月13日

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メソッドの使い方
更新日 : 2018年11月13日

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をソートする方法(文字列もソート)
更新日 : 2019年4月23日

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!
更新日 : 2019年6月8日

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クラスの変換・違いまとめ
更新日 : 2019年1月23日

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を使う方法
更新日 : 2017年9月6日

ListとArrayListの違い

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

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

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

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

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

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

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

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

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

まとめ

いかがでしたか?

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

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

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

オータケ

オータケ

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説