【Java入門】List⇔配列の相互変換は”toArray”と”asList”でOK!

こんにちは!エンジニアの中沢です。

JavaでListから配列(Array)に変換したり、配列からListに変換したい

と思ったことはありませんか? 実はそのような変換を一発でできる「toArrayメソッド」と「asListメソッド」が用意されています! 今回は、Listと配列を相互に変換する方法解説します!

この記事では、

  • Listを配列に変換したい
  • 配列をListに変換したい
  • toArrayメソッドの使い方を知りたい
  • asListメソッドはどうやって使うの?

という基本的な内容から、

  • toArrayメソッドの引数はどうしたらいいの?
  • asListメソッドで作成したリストのサイズを変更するには?

などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、Listと配列を相互に変換する方法をわかりやすく解説します!

Listから配列(Array)に変換する方法

まずは、Listから配列(Array)に変換する方法を解説します!

toArrayメソッドの使い方

ここでは、toArrayメソッドの使い方を解説します。Listから配列に変換するには、「java.util.Collection.toArrayメソッド」を使います。toArrayメソッドの使い方を覚えるために、次のプログラムで確認してみましょう。

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<>();
        list.add("さ");
        list.add("む");
        list.add("ら");
        list.add("い");

        String[] array = list.toArray(new String[list.size()]);
        
        System.out.println("List = " + list);
        System.out.println("配列 = " + Arrays.toString(array));
    }
}
[実行結果]
List = [さ, む, ら, い]
配列 = [さ, む, ら, い]

このようにtoArrayメソッドを使うことで、Listから配列に変換することができました! ここでは配列のデータを表示するためにtoStringメソッドを使っています。

引数の注意点

toArrayメソッドの引数には配列のサイズを指定しますが、「toArray(new String[0])」と「toArray(new String[list.size()])」のどちらがいいでしょうか?

どちらで書いても動作はしますが、「toArray(new String[0])」の場合はサイズ”0”の配列を作った後にすぐ削除して、新しくListと同じサイズの配列を作り直すため処理が遅くなります!

そのため、toArrayメソッドの引数はListと同じサイズで配列を作るために「toArray(new String[list.size()])」と書くようにしましょう!

配列(Array)からListに変換する方法

ここでは配列からListに変換する方法を解説します!

Arrays.asListメソッドの使い方

配列からListに変換するには「java.util.Arrays.asListメソッド」を使います。asListメソッドの使い方を覚えるために、次のプログラムで確認してみましょう。

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

public class Main {

    public static void main(String[] args) {

        String[] array = { "さ", "む", "ら", "い" };
        List<String> list = Arrays.asList(array);

        System.out.println("配列 = " + Arrays.toString(array));
        System.out.println("List = " + list);
    }
}
[実行結果]
配列 = [さ, む, ら, い]
List = [さ, む, ら, い]

このようにasListメソッドを使うことで、配列からListに変換することができました!

そのままではサイズが変更できないので注意!

asListメソッドは配列を簡単にListに変換することができて便利なメソッドですが、注意点があります! それは、asListメソッドが「固定サイズのList」を返すので、Listの要素を追加(add)したり削除(remove)することができなくなるということです!

もし、Listのサイズを変更しようとすると「UnsupportedOperationException」の例外が発生するので注意してください。ただし、これから解説する方法を使えばasListメソッドで変換したListのサイズ(要素数)を変更することができるのでぜひ確認してください!

asListメソッドで変換したListのサイズ(要素数)を変更する方法

ここでは、asListメソッドで変換したListのサイズ(要素数)を変更する方法を解説します。asListメソッドで変換したListは「固定サイズのList」なので、そのままではサイズ(要素数)を変えることができません。

「固定サイズのList」を「サイズを変更できるList」に変換する方法を次のプログラムで確認してみましょう。

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

public class Main {

    public static void main(String[] args) {

        String[] array = { "さ", "む", "ら", "い" };
        List<String> list = Arrays.asList(array);

        // ここで要素を追加しようとすると、「UnsupportedOperationException」の例外が発生する。
        // list.add("塾");

        // 次のようにすれば要素の追加が可能になる。
        List<String> newList = new ArrayList<>(list);
        newList.add("塾");

        System.out.println("配列 = " + Arrays.toString(array));
        System.out.println("List = " + list);
        System.out.println("List = " + newList);
    }
}
[実行結果]
配列 = [さ, む, ら, い]
List = [さ, む, ら, い]
List = [さ, む, ら, い, 塾]

このように、新しく宣言したListのコンストラクタに「固定サイズのList」を指定することで、「サイズを変更できるList」に変換することができました!

Listと配列の違いとは

配列やListを扱っていて配列とListの違いがイマイチわからない

といったことはありませんか? 次の記事では、Listと配列の違いを詳しく解説しているのでぜひ確認してみてください!

【Java入門】配列とListの変換(宣言の違いや2次元Listも解説)
更新日 : 2017年8月24日

Listの使い方総ざらい

Listには今回解説した以外にも様々な使い方があります!Listの様々な使い方についてはこちらでまとめているので、ぜひ確認してください!

JavaのList型とは!?ArrayListの使い方を基礎の基礎から解説!
更新日 : 2019年4月23日

配列の使い方総ざらい

配列には今回解説した以外にも様々な使い方があります!配列の様々な使い方についてはこちらでまとめているので、ぜひ確認してください!

まとめ

いかがでしたか? 今回はListと配列の変換方法について解説しました。これでListと配列の変換方法がわからなかったり、asListメソッドで変換したListのサイズが変更できないといった悩みを解決することができました!

もし、List→配列、配列→Listの変換で「toArrayメソッド」や「asListメソッド」の使い方を忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]