パパの勉強部屋

勉強の記録をつけています。Java、ネットワーク、Excel、etc.

スッキリわかる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 要素の型[行数][列数];
 ・要素の利用:
  配列変数名[行の添え字][列の添え字];