こんにちは、ユーキです。
プログラミング初心者さんのつまづきポイントの1つである配列について、コードと図解を交えてわかりやすく解説します。
配列とは
配列とは1つの変数に同じ型の複数の値が詰まったものです。チョコレートが一粒ずつ一列で箱に入っているとイメージしてください。
配列のイメージは以下のようになります。1つの配列に6つの要素があり、それぞれに値が格納されているイメージです。
宣言の仕方
配列の宣言の仕方は以下の通りです。[]を付ける位置は、型の後でも変数の後でもどちらでもOKです。
'どちらの書き方でも可能
int arr1[];
int[] arr2;
これだけだと箱を用意しただけになるので、配列のサイズを決定します。これを領域の確保といいます。今回は、最初のイメージに合わせて、要素数6の配列とします。
arr1 = new int[6];
変数と同じように、宣言と一緒に記述することも可能です。
'どちらの書き方でも可能
int arr1[] = new int[6];
int[] arr2 = new int[6];
初期化
作成したそれぞれの要素の値を設定するには、次のように記述をします。[]内の数字は、配列の添え字またはインデックスと呼びます。何番目の要素かを表します。
Javaの場合、添え字は0から始まります。今回、要素数6の配列でしたので、添え字は5までとなります。
arr1[0] = 10;
arr1[1] = 15;
arr1[2] = 20;
arr1[3] = 25;
arr1[4] = 30;
arr1[5] = 35;
宣言と初期化を同時に行う
領域の確保をせず、配列の宣言と同時に初期化をすることも可能です。
'どちらの書き方でも可能
int arr1[] = { 10, 15, 20, 25, 30, 35};
int[] arr2 = { 10, 15, 20, 25, 30, 35};
要素よりも大きい添え字を指定した場合
要素数が6の配列で、7番目以降の要素に値を詰めるような処理を書いた場合、実行したときに例外が発生します。
int arr1[] = new int[6];
arr1[0] = 10;
arr1[6] = 30; //ここで例外(ArrayIndexOutOfBoundsException)が発生する。
多次元配列
先ほどま説明してきたのは、一次元配列と呼ばれる配列です。配列の中に配列が入ったものを二次元配列といい、二次元配列を格納した配列を三次元配列といいます。マトリョーシカのように配列の中に配列を設定することができ、こういった配列を多次元配列といいます。
宣言の仕方
一次元配列と同じです。二次元にした場合は[][]、三次元にしたい場合は[][][]とします。
int[][] arr2a; //二次元配列
int[][][] arr3a; //三次元配列
領域の確保も一次元配列を同じです。
arr2a = new int[3][2];
arr3a = new int[3][2][4];
各要素ごとに設定することも可能です。
arr2a = new int[3][];
arr2a[0]= new int[2];
arr2a[1] = new int[4];
初期化
一次元配列を変わりありません。それぞれの要素を指定して代入するだけになります。
arr2a[0][0] = 1;
arr2a[0][1] = 2;
arr2a[1][0] = 3;
宣言と初期化を同時に行う
一次元配列と同じです。一つの配列を{}として、それぞれ要素を設定します。
int[][] arr2a = { {1, 2}, {3, 4}, {5} }; //二次元配列
int[][][] arr3a = { {{1, 2, 3}, {3, 4}}, { {5}, {6, 7} } }; //三次元配列
コレクション(動的配列)
配列は要素数が固定となるので、使い勝手がいまひとつです。あとから要素を追加しようと思ってもできません。
そこで、Javaではあとから要素を追加できる動的配列のクラスが用意されてします。これを総称して、コレクションといいます。
コレクションは大きく分けると、List、Map、Setの3種類に分類できます。
List
配列に一番近いコレクションで、順番を持ちます。つまり、配列と同じようにX番目の要素に値を格納といった使い方をするコレクションです。
Listはインタフェースですので、これをそのままでは使えません。このListを実装したクラスを使います。Listを実装したクラスは、ArrayListやLinkedListなどがあります。まずはArrayListの使い方だけ覚えればOKです。
ArrayListの使い方は以下のようになります。addメソッドで末尾に要素を追加してきます。添え字を指定して要素を追加することも可能です。
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("Z");
list.add(1, "B"); //2番目に追加
Map
Mapはキーと値となるコレクションです。Listと違って、順序を持ちません。
MapもList同様にインターフェースです。Mapが実装されたクラスで代表的なものはHashMapとなります。
HashMap<String, String> map = new HashMap<String, String>();
map.put("ItemA", "えんぴつ");
map.put("ItemB", "消しゴム");
map.put("ItemA", "ボールペン"); //キーが同一のため、「えんぴつ」は上書きされる。
Set
Setは、値だけのコレクションです。順序もキーも持ちません。Mapのキーだけの部分をイメージしてもらうと良いと思います。
HashSet<String> set = new HashSet<String>();
set.add("りんご");
set.add("みかん");
set.add("バナナ");
set.add("りんご"); //要素が重複するため、追加されない。
まとめ
今回は、配列についての説明でした。
- 1つの変数で、複数の値が持てるもの
- 配列は一次元配列のほか、多次元配列がある
- 動的配列には、大別してList、Map、Setの三種類が存在する
少しでもお役に立てば、幸いです。