【Java Silver】配列について
はじめに
Java Silver SE11の勉強メモ
Javaの配列の特徴
配列は、値の集合を扱うための配列クラスから作られる「インスタンス」である。
そのため、必ずどこかでnewを行うはず(?)
配列が扱う値のことを要素と呼ぶ。
なお要素については、
①同じ型、互換性のある型の値しか扱えない ②扱う要素数は、インスタンス生成時(newした時)に決める。 あとで要素数は変えられない。
配列の宣言
配列のインスタンス生成の流れは以下。
int a[]; //配列型変数の宣言 a = new int[3]; //配列インスタンスの代入
短く書くと。。。
int a[] = new int[3]
となる。
ちなみに。
int [] a;
と、[]と変数名を逆に宣言することも可能。
int[0]を宣言するとどうなるのか?
int a[] = new int[0]
要素を一つも入れられないと言うだけの話。
コンパイルエラーにはならない。
配列型変数をprintlnすると
配列はインスタンスである。
ので、配列型の変数をそのままprintlnすると、ハッシュコードが出力される。
多次元配列
自分が苦手な部分…
配列の基本的な考えはここがわかりやすいとおもう。
eng-entrance.com
上記サイトの例のように、よく見るのは先程と同じような宣言方法の
int a[][] = new int[4][4] //2次元配列 int b[][][] = new int[3][2][3] //3次元配列
ただ[]をまとめる必要はなく、 以下のような記述ももちろんOK。
int[] a[][]; int[][] b[];
int[要素数]変数名はOUT
あくまで左辺は変数宣言なので、そこに要素数を入れる事はできない。
コンパイルエラーが発生する。
要素数の指定の仕方
①配列インスタンスの生成には、必ず要素数の指定が欠かせない。 ②要素数は、int型であり浮動小数点数等は利用できない。
多次元配列の生成のされ方
ここは初見だった。
例えば以下のような2次元配列。
int[][] array = new int[3][3];
実は、配列されるうえで順序が存在する。
まず最初に1次元目の配列が生成された後、2次元目が生成される。
1次元目は必ず生成されなければならない。
例えば以下のようなコードはアウト。
int[][] a = new int[][3];
こちらは1次元目から宣言しているためOK。
int[][] array = new int[3][]; array[0] = new int[2];
上記のコードは、
1次元目が3つの要素を持つarrayという配列インスタンスを生成し、
1つめの要素に2つの要素を持つ2次元目を生成している様子。
1次元目は欠かせないが、2次元目からは別で入れることが出来たりする。
初期化子を使った宣言
配列はインスタンスなためnewしなければならなかったりするが、
生成、初期化から変数宣言・参照まで配列を扱うに当たる4つのステップを一つにまとめることも可能。
{}初期化子
を利用することである。
int[] array = {4,3}//書き方① int[] array = new int[]{4,3}//書き方②
これは以下と同じ。
int[] array = new int[2]; int[0] = 4; int[1] = 3;
ただ、書き方②のnewを使う場合は、[]内に要素数を指定してはいけない。
通常は指定するが、{}初期化子
を利用する場合は自動的に要素数を判断してくれる。
以下のコードはコンパイルエラー。
int[] array = new int[2]{4,3}
以上。