Javaの配列を使っていくためには、まず「宣言」を行う必要がある。宣言方法は次の通りだ。
int number[] = new int[20] ;
このページではJavaの配列の宣言方法についてもう少し詳しくお伝えしよう。
配列の宣言
プログラミングには配列というものがある。これは「配列とは?」で説明したが、変数がたくさん入る箱のようなものだ。
この箱を使うために、変数と同じように宣言が必要になる。
配列宣言の書き方
まず、配列を使う際の変数宣言の記述方法からだ。次のようになる。
int number[] ;
なんとなく[]が箱をイメージできるので、覚えやすいだろう。次の書き方でもOKだ。
int [] number;
上記はint型の配列の宣言方法だが、その他の型でも同様だ
double decimal[] ;
boolean flag[] ;
また、Stringのようなオブジェクト型でも同様に配列を宣言する事ができる。
String str[] ;
Date day[] ;
続いて器を用意する
上の例は、あくまでも変数の宣言であって、すぐさま配列が使えるわけでは無い。配列を使用するためには、必要な個数を予め決めて、その分の器を用意しなければならない。
そのためにはnew演算子を使用する。例えば、20個の数値を入れる配列を使う場合は、以下のように記述する。
int number[] = new int[20] ;
同様に、10個の文字列を入れる配列は、以下のように記述する。
String str[] = new String[10] ;
このように、配列に対してnew演算子を使用して個数を確定させることを、「配列を生成する」という。また、この個数の事を「配列の長さ」といい、一つ一つの変数を「配列の要素」という。
配列の長さを表す数値(上記の「10」など)は、intやshortのような整数型の変数であっても構わない。
例えば、途中の処理で配列の長さが判明する場合、int型変数countにその数を格納し、
String str[] = new String[count] ;
というような記述方法も可能だ。
まとめると次のようにいずれかで宣言ができる形だ。
1 2 3 4 5 6 7 8 |
Class Array { public static void main(String[] args) { int [] ary1; //宣言 ary1 = new int[4]; //メモリ確保 int [] ary2 = new int[4]: //同時に } } |
配列の初期値
配列を宣言し、new演算子を使用して必要数を確保した変数の中身は、単一の変数を宣言した時と同じだ。
例えば、int型の変数を宣言したとき、
int count = 0 ;
とせずに
int count ;
と記述すると、変数countには初期値として「0」が代入されている。数値型はどれも「0」が初期値となる。
配列の場合
int number[] = new int[20] ;
と宣言すると、20個のnumberすべてが「0」で初期値が設定された状態となる。
プリミティブ型変数の場合は何かしらの数値が初期値として設定されているが、オブジェクト型の場合はnullが初期値となる。
ただし、一般的なプログラミングのマナーとしては、変数を宣言した時の自動的な初期値は信頼せず、明示的に値を設定するのが一般的だ。配列の場合も同様で、必ず明示的に初期値を代入する習慣をつけておこう。
配列の長さは後から変えられない
さて、「配列の生成」についてだが、忘れてはならない重要なポイントが一つある。それは「長さは後から変えられない」ということだ。
例えば
int number[] = new int[20] ;
と長さ20の配列を宣言した場合、最大で20個までしか値を保持する事は出来ない。あとから21個目の要素が必要になっても、長さを変えることは出来ないのだ。
このため、配列の長さは不足が無いように生成時に注意しなければならない。
どうやって対処をするか?
実際のプログラミングでは配列を追加しないといけないような場面が頻繁にある。この件については、大きく分けて3つの対応方法が考えられる。
配列の使用目的に対し、十分大きな数で長さを決めて生成する
例えば、クラス全員のテストの点数を保持する配列を考えるとき、クラスの人数が多くても50人を超えることが無いということがあらかじめわかっているならば、
int score [] = new int[50] ;
と宣言してしまっても良いだろう。
ただし、あまりにも大きな数になる場合は注意が必要だ。
「配列の基本的な使い方」で詳しく説明するが、配列を宣言すると長さに応じてコンピューター上のメモリを占有することになる。
その為、あまりに長い配列を宣言する事は、ハードウェア的な問題から不可能となる場合があるのだ。
例えば、数百万人分のデータを扱うようなケースでは、そもそも一度に全員の情報を変数に入れておく必要があるのかどうかを改めて検討する必要がある。
通常は、すべての情報をプログラム内の変数として保持するのではなく、データベースなどを用いて、プログラム外で管理し、必要な情報だけを取り出すといった方法を用いる。
必要数を算出し、動的に生成する
これは、長さとしての数値を直接プログラム中に記述するのでは無く、数値型変数を用いて、プログラム中で必要な長さを算出し、生成時の長さとする方法だ。
この方法は最もポピュラーな手法だ。使いどころを間違えると無駄な処理を作りこむ羽目になる事も珍しくないが、これがいいだろう。
例えば、ファイルから読み込んだデータを保持するための配列を宣言する際、あらかじめデータ数(=配列の長さ)を知ることは出来ないため、敢えてファイル全体を空読みして行数を算出し、そこから改めて配列を宣言するというものだ。
これは、本来プログラムの動作に必要のない「空読み」という無駄な処理を必要とする上に、その無駄がプログラムの実行時間も長くしてしまう。
このような場合は配列では無く「Listオブジェクト」を使用するべきだ。
Listオブジェクトを使用する
Listオブジェクトは可変長配列とも呼ばれるもので、長さを自由に拡張する事ができる。
上のケースのように、「空読み」のような無駄な処理をするのであれば、Listオブジェクトを使用して、必要に応じて長さを変える方が良いだろう。
Listオブジェクトについては、ここでは詳しく説明はしないが、非常に使用頻度の高いオブジェクトなので、是非とも使い方をマスターしてもらいたい。下記などをご参考に。
まとめ
このページではJavaの配列の宣言方法についてお伝えをしてきた。
多少特殊な部分もあったと思うが、基本的には理解しやすいはずだ。しょっちゅう使うものなので覚えてしまおう。
コメント