リストと配列は似て非なる概念だ。リストから配列に変換したり、配列からリストに変換したいことはあるだろう。
このページではリストと配列の変換方法についてお伝えした。
目次
リストから配列に変換する方法
リスト(List)から配列に変換を行うためには、変換のために準備されたメソッドがあるので、その使い方を理解しておく必要がある。そのメソッドとはtoArrayである。Listインタフェースが実装されたクラスであればこのメソッドを使うことができる。ここでは、Listインタフェースが実装されたクラスのオブジェクトのことをリストと呼ぶ。
ArrayListクラスやLinkedArrayクラスなどは、Listインタフェースが実装された代表的なクラスである。
書き方の基本は簡単だ。
配列変数名[] = リスト.toArray();
メソッド
toArray()
戻り値の型 |
public Object[] |
内容 |
正しい順序(最初から最後の要素に向かって)でリストの中のすべての要素を含む配列を戻す。 戻される配列は,このリストによるどんな参照も保持されないという意味で安全です。(言い換えれば,このメソッドは新たな配列を確保します。)呼び出し側は,戻された配列を自由に変更可能です。 このメソッドは,配列ベースとCollectionベースAPI間のブリッジになります。
戻り値:正しい順序でリストの中のすべての要素を含む配列を戻す。 参照:Arrays.asList(Object[]) |
では、実際のコードを見てみよう。
サンプルプログラム
このプログラムがtoArrayメソッドを使ったサンプルプログラムだ。Listインタフェースを実装したArrayListクラスのオブジェクトに要素を追加し、その後オブジェクトに追加された要素をすべて配列に変換している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.ArrayList; import java.util.List; public class ListToArray { public static void main(String[] args) { List<String> list = new ArrayList<String>();//[1] list.add("りんご");//[2] list.add("みかん");//[3] list.add("もも");//[4] Object[] objects = list.toArray();//[5] for (Object object : objects) {//[6] System.out.println("[7] 要素 :" + (String)object); } } } |
実行結果
1 2 3 |
[7] 要素 :りんご [7] 要素 :みかん [7] 要素 :もも |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] ArrayListクラスのオブジェクトlistを生成する。
- [2]-[4] 文字列「りんご」「みかん」「もも」をlistに追加する。
- [5] オブジェクトlistのtoArrayメソッドを呼び出して、リストを配列objectsに変換する。
- [6][7] 配列:objectsのすべての要素を表示する
配列をリストに変換する方法
配列からリスト(List)に変換を行うためにも、準備されたメソッドがある。この変換のためには、クラスメソッドjava.util.Arrays.asList()が準備されている。配列であれば、このメソッドを使うことができる。
書き方の基本は簡単だ。
リスト = Arrays.asList(配列変数名);
このメソッドの詳細も見ておこう。
メソッド
Arrays.asList(T... a)
メソッドの内容を次に示すが、注意点がある。それは、リストが固定長であることだ。つまり、配列と同じように追加できない。その代わり、書き込んだ値が配列にも反映される。
戻り値の型 |
public static <T> List<T> |
内容 |
指定された配列が背後にある固定長のリストを戻す。(戻されたリストへの変更は、その配列に書き込まれる) このメソッドは、Collection.toArray()との組み合わせで配列ベースとコレクションベースAPIのブリッジとして働く。 戻されるリストは、シリアル化可能でRandomAccessが実装されている。
このメソッドは、いくつかの要素を初期値として格納するために固定長のリストを生成する便利な方法を提供する。 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
型引数: T – 配列の中のオブジェクトのクラス 引数: a – リストの背後にある配列 戻り値: 指定された配列のリストビュー |
では、実際のコードを見てみよう。
サンプルプログラム
このプログラムがArrays.asList()メソッドを使ったサンプルプログラムだ。要素を初期値として代入した配列からリストに変換を行っている。
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.Arrays; import java.util.List; public class ArrayToList { public static void main(String[] args) { String[] strings = {"りんご", "もも", "みかん"};//[1] List list = Arrays.asList(strings);//[2] for (Object string : list) {//[3] System.out.println("[4] 要素 :" + (String) string); } } } |
実行結果
1 2 3 |
[4] 要素 :りんご [4] 要素 :もも [4] 要素 :みかん |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 文字列の配列stringsを宣言し、初期値を代入する。
- [2] Arrays.asListクラスメソッドを使って、配列をリストに変換する。
- [3]-[4] リストの要素をすべて表示する
変換したリストの注意点
前のセクションで配列をリストに変換した時の注意点として次の二つの点をあげた。
- リストが固定長であり、配列と同じように追加できない。
- 書き込んだ値が配列にも反映される。
この点を実際のコードから確認しておこう。リストに要素(「かき」)を次のように追加する。
List list = Arrays.asList(strings);
list.add("かき");
このコードが実行されると、例外が発生する。
1 2 3 4 |
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at article.arrayconversion.ArrayToList.main(ArrayToList.java:10) |
この例外を回避するためには、リストを追加可能な別のクラスに変換する必要がある。例えばArrayListクラスに変換することができる。
List<String> arrayList = new ArrayList<String>(list);
サンプルプログラム
このプログラムは、リストを追加可能な別のクラス(ArrayList)のオブジェクトに変換する方法を示している。また、リストの値を変更すると配列にその変更が反映されるが、ArrayListのオブジェクトには反映されないことを示している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ListToArrayList { public static void main(String[] args) { String[] strings = {"りんご", "もも", "みかん"};//[1] List<String> list = Arrays.asList(strings);//[2] List<String> arrayList = new ArrayList<String>(list);//[3] list.set(0, "いちご");//[4] arrayList.add("かき");//[5] for (String string : strings) {//[6] System.out.println("[7]" + (String) string); } System.out.println(""); for (String string : arrayList) {//[8] System.out.println("[9]" + (String) string); } } } |
実行結果
1 2 3 4 5 6 7 8 |
[7]いちご [7]もも [7]みかん [9]りんご [9]もも [9]みかん [9]かき |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 文字列の配列stringsを宣言し、初期値を代入する。
- [2] Arrays.asListクラスメソッドを使って、配列をリストに変換する。
- [3] リストをArrayListクラスのオブジェクトに変換する。
- [4] リストの最初の要素を「いちご」に置換する。
- [5] オブジェクトarrayListに「かき」を追加する。
- [6]-[7] stringsの要素をすべて表示する
- [8]-[9] arrayListの要素をすべて表示する
まとめ
このページではJavaの配列とリストの変換についてまとめてお伝えをしてきた。
サンプルコードもつけているため、参考にしていただければ幸いだ。