スッキリわかるJava入門 第4章 配列
●配列(array)とは
・同一種類の複数データを並び順で格納するデータ構造。
・1つ1つを要素(element)と言う。
・要素の番号を添え字(index)といい、0から始まる決まりになっている。
・配列の各要素には同一種のデータしか格納できない。
・データ構造(data structure)の代表的なもの。(マップ、スタックなどのデータ構造もある)
・データ構造とは?
・幾つかの関係あるデータをグループにして、まとめて1つの変数に入れる仕組み。
・きちんとした構造に整理して、後から特定の値を出せるように格納できる。
●配列の作成
・Step1 配列変数の宣言:
・配列変数を作成。
・代入できるのは、値ではなく要素。
・int[ ] score;
・Step2 要素の作成と代入:
・new演算子で、指定された型の要素を、内の数値の分だけ作成する。
・作成された要素は代入演算子で、配列に代入することができる。
・score = new int[5];
・Step1/2を同時に行う。
・int[ ] score = new int[5];
・配列の要素数は、配列名.lengthで分かる。
・score.length;
・配列の初期化
・変数:
・値を取り出す前に、必ず値を代入して初期化する必要がある。
・初期化していない変数を利用すると、コンパイルエラーが発生する。
・配列の要素:
・自動的に初期化される。
・例えば、int型の要素は全て0で初期化される。
・要素がどのような値で初期化されるかは、要素の型によって決められている。
・数値の型(int,doubleなど):0
・boolean型:false
・String型:null
・省略記法
・配列の作成と初期値の代入を同時に行う。
int score1 = new int[ ]{20,30,40,50,80};
int score2 = {20,30,40,50,80};
●for文と配列
・配列をループで回す
for( int i = 0 ; i < 配列変数名.length ; i++ ){
for( int i = 0 ; i < score.length ; i++ ){
System.out.println(score[i]);
}
・拡張for文
for( 要素の型 任意の変数名 : 配列変数名 ){
for( int value : score ){
System.out.println(value);
}
⇒ループが1周するたびに次の要素の内容が「任意の変数名」で指定した変数に格納される。
ブロック内ではその変数を利用して要素を取り出す。
●ガベージコレクション
・if ( b == true ) {
int[ ] i = {1,2,3};
}
⇒ifブロックが終了したら、変数iはメモリから消滅する。
newで確保された要素たちは普通の変数ではないので、ブロックが終了しても寿命は迎えない。
残った配列はJavaのプログラムからは、どのような方法を使っても読み書きすることはできず、事実上メモリ内のゴミ(garbage)となる。
ゴミとなった配列を放置し続けると、ゴミが溜まり続け、メモリを圧迫する可能性がある。
本来ならば、メモリの後片付けをプログラマが行わなければならない。
⇒Javaにはガベージコレクション(GC:garbage collection)という仕組みが常に動いており、実行中のプログラムが生み出したメモリ上のゴミ(=どの変数からも参照されなくなったメモリ領域)を自動的に探し出して片づけてくれる。
●null
・nullを使用する事で意図的に参照しないようにできる。(=どの変数からも参照されなくなったメモリ領域とする)
・int型などの参照型変数に代入すると、その変数は何も参照しなくなる。
・int型などの基本型変数には代入する事ができない。
●多次元の配列
・1次元配列に縦の並びを加えると2次元配列になる。
・データを表のような形で扱いたいときに使用すると便利。
・2次元以上の配列を多次元配列と呼ぶ。
・科学技術計算などでは多く利用される。(ビジネスアプリケーションでは使う機会は少ない)
・宣言:
要素の型[ ][ ] 配列変数名 = new 要素の型[行数][列数];
・要素の利用:
配列変数名[行の添え字][列の添え字];