Javaプログラムで頻繁に利用することになるコレクション「List」ですが、色々な言語を触っていると使い方をつい忘れてしまいがちです。
本記事では、Javaプログラマーなら必ず利用する「List」の初期化と値の追加方法、初期値設定のやり方をサンプルコードを交えながらご紹介していきます。
目次
JavaでListの初期化と値を追加する基本的な方法について理解しよう
まずはJavaプログラムにおいての必須知識となるJavaでListを初期化する方法についてご紹介していきます。
Listを初期化してみよう
まずはJavaでListを利用する際の初期化方法についてご紹介していきます。
基本構文は下記の通りです。
List<データ型> インスタンス名 = new ArrayList<データ型>();
Listは様々なデータ型を格納することが可能なため、Listの初期化時にデータ型を指定します。
データ型とは、「String」や「Integer」などを指します。
またダイアモンド構文を用いて下記のように記載することも可能です。
List<データ型> インスタンス名 = new ArrayList<>();
右側のデータ型が省略されていることがご確認頂けます。
Listに値を追加してみよう
Listの初期化が完了すれば次に値の追加が必要になります。
値を追加する方法としては「add」メソッドを利用する方法があります。
インスタンス名.add(追加する値);
JavaでListを初期化するタイミングで初期値も設定してみよう
Listを初期化するタイミングで同時に初期値を設定する方法はいくつか存在します。
asListで初期値を設定するとリストに追加出来ない?!
Listの初期化でよく利用されるメソッドに「asList」があります。
まずはサンプルコードで使い方についてご紹介していきます。
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { List sampleList = Arrays.asList("あい", "う", "えお"); // ※1 System.out.println(sampleList.get(0)); System.out.println(sampleList.get(1)); System.out.println(sampleList.get(2)); } }
実行した結果が下記の通りとなります。
あい う えお
※1の行で初期値を設定していることがご確認頂けます。
しかし注意して頂きたいのがサンプルコードのように「asList」メソッドで初期値を設定した場合、Listに新たに値を設定することが出来なくなります。
下記のサンプルはコンパイルすることは可能ですが、実行時にエラーとなるので確認してみましょう。
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { List sampleList = Arrays.asList("あい", "う", "えお"); System.out.println(sampleList.get(0)); System.out.println(sampleList.get(1)); System.out.println(sampleList.get(2)); // リストに追加しようとするとエラーになる sampleList.add("かきく"); System.out.println(sampleList.get(3)); } }
実行した結果が下記の通りとなりました。
あい う えお Exception in thread "main" java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationExceptionが出力されていることをご確認頂けます。
原因はサンプルのような記述法でasListを使用した場合、あらかじめ決められたサイズのリストを定義し、値の追加・削除をすることが出来ない仕様となっているためです。
asListは書き方によっては値の追加・削除が可能
上記のサンプルではasListメソッドではリストに追加・削除出来ないとご紹介しましたが、ArrayListのコンストラクタに指定することでリストのサイズを決めずに初期値を設定することも可能です。
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { List sampleList = new ArrayList(Arrays.asList("あい", "う", "えお")); System.out.println(sampleList.get(0)); System.out.println(sampleList.get(1)); System.out.println(sampleList.get(2)); sampleList.add("かきく"); System.out.println(sampleList.get(3)); } }
今回のサンプルではリストを初期化する際に、new ArrayListの引数としてasListメソッドを利用しています。
実行した結果が下記の通りとなります。
あい う えお かきく
エラーとならずにListに値が追加されていることがご確認頂けます。
同じ「asList」メソッドでも記述方法によって、初期化後にListへ追加・削除出来るどうかが決まりますので注意が必要です。
addメソッドを利用して初期値を追加することも可能
最初にご紹介したnew演算子とaddメソッドを応用して、Listの初期化時に初期値まで設定してしまうことも可能です。
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { List sampleList = new ArrayList(){{add("あい"); add("う"); add("えお");}}; System.out.println(sampleList.get(0)); System.out.println(sampleList.get(1)); System.out.println(sampleList.get(2)); sampleList.add("かきく"); System.out.println(sampleList.get(3)); } }
サンプルコードを実行した結果が下記の通りとなります。
あい う えお かきく
出力結果は1つ前のサンプルと全く同じ結果となっていることがご確認頂けます。
さいごに:JavaでListの初期化および初期値の設定は記述方法に気を付けよう!
本記事では、JavaでのListの初期化方法と値の追加、初期値設定の方法についてご紹介してきました。
Listへの初期値設定は余程の理由が無ければ、最初のサンプルとして紹介した「Arrays.asList」を使用することは避けるべきというのが昨今の風潮です。
ハードウェアのメモリ搭載量も増えていますので、無駄にバグを生むような実装はせず、2つ目や3つ目のサンプルでご紹介した初期値設定の方法を利用することをお勧めします。
メソッドによってはデータ領域が固定されるため注意が必要です。