目次
宣言と同時に配列を初期化
次のように記述することで、宣言と同時に配列を初期化できます。
サンプルコード
static void arraySample() { String[] s = {"りんご", "みかん", "ばなな"}; } System.out.println(s[1]);
出力結果:
みかん
配列の要素数を取得する – length
配列にいくつ要素が入っているかを取得したい場合は length を使います。length はメソッドではなく、フィールドである点に若干の注意が必要です。
サンプルコード
static void lengthSample() { String[] s1 = {"りんご", "みかん", "ぶどう"}; String[] s2 = {}; System.out.println(s1.length); System.out.println(s2.length); }
出力結果:
3 0
配列をコピーする – clone
ある配列と同じ配列を作りたい場合は、clone が便利です。
サンプルコード
static void cloneSample() { String[] s1 = {"りんご", "みかん", "ぶどう"}; String[] s2 = s1.clone(); System.out.println(s1[0] + ' ' + s1[1] + ' ' + s1[2]); System.out.println(s2[0] + ' ' + s2[1] + ' ' + s2[2]); }
出力結果:
りんご みかん ぶどう りんご みかん ぶどう
配列をコピーする – System.arraycopy
Java の配列は、初期化時のサイズで固定されてしまいます。一度作った配列のサイズを大きくしたい場合は System.arraycopy を使う必要があります。
arraycopy は clone と同じく配列をコピーする際に使用しますが、clone よりも細かな設定ができます。
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) src...コピー元の配列 srcPos...コピー元配列(src)のコピーする開始位置 dest...コピー先の配列 destPos...コピー先配列(dest)のコピーする開始位置 length...コピーする要素の数
サンプルコード
static void arraycopySample() { String[] s1 = {"りんご", "みかん", "ぶどう"}; String[] s2 = new String[5]; System.arraycopy(s1, 0, s2, 0, 3); s2[3] = "ばなな"; s2[4] = "さくらんぼ"; System.out.println(s1[0] + " " + s1[1] + " " + s1[2]); System.out.println(s2[0] + " " + s2[1] + " " + s2[2] + " " + s2[3] + " " + s2[4]); }
出力結果:
りんご みかん ぶどう りんご みかん ぶどう ばなな さくらんぼ
配列の結合をする場合も arraycopy を使うと便利です。
サンプルコード
static void joinArraySample() { String[] s1 = {"りんご", "みかん", "ぶどう"}; String[] s2 = {"ばなな", "さくらんぼ", "もも"}; int rLen = s1.length + s2.length; String[] rStr = new String[rLen]; //s1とs2両方の長さ分の配列を初期化 System.arraycopy(s1, 0, rStr, 0, s1.length); System.arraycopy(s2, 0, rStr, s1.length, s2.length); //コピー先配列の開始位置の設定がポイント System.out.println(rStr[0] + " " + rStr[1] + " " + rStr[2] + " " + rStr[3] + " " + rStr[4] + " " + rStr[5]); }
出力結果:
りんご みかん ぶどう ばなな さくらんぼ もも
多次元配列を作る
配列の中に配列を作成することで、多次元配列を作成できます。表データを格納する場合などに役立ちます。
サンプルコード
static void twoDArraySample() { int[] a1 = {38, 84, 98}; int[] a2 = {32, 11, 56}; int[] a3 = {82, 77, 8}; int[][] twoDArray = {a1, a2, a3}; for (int[] a : twoDArray) { for (int score : a) { System.out.print(score + " "); } System.out.println(""); } }
出力結果:
38 84 98 32 11 56 82 77 8