Javaにはlistと配列という似た機能が存在します。
どちらも利用したことはあるものの、それぞれの違いを把握出来ていない方も多いのではないでしょうか。
そこで本記事では、listと配列の違いに関する基本的な情報とお互いの変換方法についてご紹介していきます。
目次
Javaのlistと配列の違いとは?
Javaには複数の値を保持する方法として、listと配列という似た機能が存在するため、特に初心者の方は混乱しやすいものです。
まずはlistと配列の違いを確認してから、それぞれの変換方法について解説していきます。
list
listはJavaの標準機能の1つで、Java.Util.Listインターフェースを実装したコレクションクラスのことを指します。
要素を順序通り並べて格納することが可能(重複含む)で、インスタンス作成時に要素数を決めなくて良いため、要素の追加・削除を自由に行うことが可能です。
Listの実装クラスには、「ArrayList」や「LinkedList」などが存在します。
生成方法
List インスタンス名 = new ArrayList();
「List」の部分に関しては、イコールの右側に指定した「ArrayList」などの実装クラスを指定することも可能です。
一方で、イコールの右側に「List」を指定することは出来ず、必ず実装クラスを明示的に指定する必要があります。
配列
配列は、同じ型の複数の値を、1つの変数に格納して利用することが出来る機能です。
配列はlistと異なり、要素数をあらかじめ決めておく必要があります。
listが要素の追加・削除に応じてメモリ領域を可変させるのに対し、配列はあらかじめ決まったメモリ領域を確保する違いがあります。
生成方法
クラス名[] インスタンス名 = new クラス名[要素数];
listと配列どちらを利用すべきか?
listと配列でどちらが優れているといったことはなく、利用する目的や用途によって使い分けることが大切です。
listを利用する場合の例としては、インスタンス作成時に要素数が不確定の場合や、要素の追加や削除が多い場合などは、listの利用が適していると言えます。
一方、配列を利用するケースとしては、要素数が始めから明確に決まっている場合や、データにアクセスする機会が多い場合には処理速度から配列の方が適しています。
Javaでlistから配列へ変換する方法
ではlistと配列の違いを説明したところで、listから配列へ変換する方法についてもご紹介していきます。
listから配列への変換には、Collectionsクラスの「toArray」メソッドを利用することが可能です。
基本構文
toArrayメソッドでlistから配列への変換は下記のように記述します。
データ型 変数 = リスト.toArray(new データ型[リスト.size()]);
「リスト.size()」に関しては、要素数を直接指定しても問題ありません。
サンプル
では実際のサンプルコードで動きを確認してみましょう。
package test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> strList = new ArrayList<>(); strList.add("いぬ"); strList.add("ねこ"); strList.add("とり"); System.out.println("リスト: " + strList); String[] strArray = strList.toArray(new String[strList.size()]); System.out.println("配列: " + Arrays.toString(strArray)); System.out.println(strArray[0]); System.out.println(strArray[1]); System.out.println(strArray[2]); } }
実行した結果が下記の通りです。
リスト: [いぬ, ねこ, とり] 配列: [いぬ, ねこ, とり] いぬ ねこ とり
変換後のデータ一覧を確認しても配列に変換されているのか分かりづらいですが、「strArray[インデックス番号]」でデータが取得出来るようになっているため、配列への変換がきちんと行われていることをご確認頂けます。
Javaで配列からlistへ変換する方法
続いて配列からlistへの変換方法についても確認していきましょう。
配列からlistへの変換には、Arraysクラスの「asList」メソッドを利用することが可能です。
基本構文
asListメソッドで配列からlistへの変換は下記のように記述します。
List インスタンス名 = new ArrayList(Arrays.asList(配列));
リストのインスタンスを生成する際、引数として既存の配列をasListメソッドを利用して渡すことで、既存配列のデータをそのままリストに変換することが出来ます。
サンプル
では実際にサンプルコードで動きを確認していきましょう。
package test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] strArray = {"いぬ", "ねこ", "とり"}; System.out.println("配列: " + Arrays.toString(strArray)); List<String> strList = new ArrayList<>(Arrays.asList(strArray)); System.out.println("リスト: " + strList); System.out.println(strList.get(0)); System.out.println(strList.get(1)); System.out.println(strList.get(2)); } }
実行した結果が下記の通りです。
配列: [いぬ, ねこ, とり] リスト: [いぬ, ねこ, とり] いぬ ねこ とり
取得結果の表示では、Collectionsクラスのgetメソッドで値が取得出来るようになっていることから、リストへの変換がきちんと行われていることをご確認頂けます。
さいごに: listと配列の違いをきちんと理解してJava開発に取り組もう
本記事では、listと配列の違いについての情報とそれぞれの変換方法についてサンプルコードを掲載しながらご紹介してきました。
listと配列は、データを一列に並べるという意味では似た機能ではありますが、利用用途に応じて使い分けを行う必要があります。
ただ、コンピューターの性能自体が向上している昨今、そこまで厳密に使い分けを意識しなければならないことも多くありません。
今回ご紹介したようなそれぞれの変換方法についても把握しておき、プログラムによってうまく処理を切り替えながら開発出来るように理解を深めてみてください。