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

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

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

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

この記事では、

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

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

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

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

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

目次

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と配列の違いを詳しく解説しているのでぜひ確認してみてください!

Listの使い方総ざらい

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

配列の使い方総ざらい

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

まとめ

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

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

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次