Javaの配列使用方法(宣言、初期化、代入、要素数、ソート)


配列とは
プログラムの「配列」は、複数のデータをメモリへ順番に記憶する変数です。
メモリ上のイメージ
1 |
String array[] = { "a", "b", "c", "d" }; |
下記のイメージでメモリ上に情報が格納されます。
配列の始まりについて
配列は数字の「0」から始まります。
この「0」のことをプログラムでは「要素」と呼びます。
また、要素の数(合計)を「要素数」といいます。先程のイメージでは要素が4つある為、要素数は「4」になります。(0,1,2,3)の4つですね。
配列の宣言方法
配列の宣言は、ブラケットを使用します。
[] ←これがブラケットです。
配列の宣言は2種類の方法があります。コード例を見てみましょう。
1 2 3 |
// コード例 String[] array1; // ←こちらの書き方を推奨 String array2[]; |
Javaの配列宣言はブラケットをデータ型(String等)の直後に記載するのが一般的です。
後者の配列宣言は、C言語とかで使用するケースですね。
配列の初期化と要素数指定方法
配列の要素数を指定する方法も2種類あります。
ただ、開発現場では要素数のサイズ指定を使用するケースがあまり無いので、頭の片隅に入れておけばOKです。
1 2 3 4 5 6 |
// コード例 String[4] array; // ←× この記述はコンパイルエラーになります。 String array[4]; // ←× この記述はコンパイルエラーになります。 String[] array = new String[4]; // ←こちらの書き方を推奨 String array[] = new String[4]; |
配列に値を代入する方法
要素番号を指定して値を設定します。
1 2 3 |
// コード例 array[0] = “a”; // 0番目に「"a"」を代入 array[1] = “b”; // 1番目に「"b"」を代入 |
配列の要素数を取得する方法
「length」を使用します。
1 2 3 4 |
// コード例 String[] array = new String[4]; array.length; // ← 4が返却されます。 |
文字列のサイズ取得は「length()」メソッドを使用します。
カッコが付くか付かないかで意味が変わります。
「length」はフィールドで「length()」はメソッドになります。
違いは、説明することもないので覚えなくてOKです。
配列のエラー例
間違えやすい配列のプログラムです。
1 2 3 4 |
// コード例 String[] array = new String[4]; System.out.println(array[4]); |
上記のコードを実行すると「java.lang.ArrayIndexOutOfBoundsException: 4」が出力されます。
このプログラムの場合「0,1,2,3」が要素ですので、配列の要素数を超えたアクセスとなり、エラーとなります。
配列の末尾の要素を取得したい場合、lengthに「-1」すればOKです。
1 2 3 4 |
// コード例 String[] array = new String[4]; System.out.println(array[array.length - 1]); |
Javaの配列の便利機能を紹介
ここからは、Javaの配列で使用する便利機能を紹介します。
配列のコピー方法
自力で頑張る場合、こうなります。非効率ですね。
1 2 3 4 5 6 7 |
// コード例 String[] oldArray = { "a", "b", "c", "d" }; String[] newArray = new String[oldArray.length]; for (int i = 0; i < oldArray.length; i++) { newArray[i] = oldArray[i]; } |
配列のコピーは「System.arraycopy」を利用しよう
配列コピー用の機能「System.arraycopy」が用意されています。
中身は以下の通りです。
1 2 3 4 5 6 |
// arraycopyメソッド public static void arraycopy(Object 転送元の配列名, int 転送元配列のコピー開始位置, Object 転送先の配列名, int 転送先配列のコピー開始位置, int コピーする要素数) |
配列を全部コピーする
1 2 3 4 5 |
// コード例 String[] oldArray = { "a", "b", "c", "d" }; String[] newArray = new String[oldArray.length]; System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); |
特定の要素のみコピーする
1 2 3 4 5 |
// コード例 String[] oldArray = { "a", "b", "c", "d" }; String[] newArray = new String[oldArray.length]; System.arraycopy(oldArray, 1, newArray, 0, 1); |
配列コピーの間違いやすい例
1 2 3 4 5 |
// コード例 int[] oldArray = { 1, 2, 3, 4 }; String[] newArray = new String[oldArray.length]; System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); |
int型の配列をString型の配列へコピーしようとしてます。
この場合「java.lang.ArrayStoreException」のエラーが出力されます。
配列のソート方法
配列のソートは「Arrays」クラスの「sort」メソッドを使用します。
1 2 3 4 5 6 |
// コード例 String[] array = { "290", "10", "1", "90", "9000", "3000000" }; Arrays.sort(array); // 昇順ソート |
「sort」メソッドは、昇順でソートされます。
また、文字列の場合、1文字ずつ先頭から並び替えされます。プログラムの実行後の配列は下記の通り設定されます。
a[0] ← 1
a[1] ← 10
a[2] ← 290
a[3] ← 3000000
a[4] ← 90
a[5] ← 9000
配列のイテレーション
配列を全て取得する方法です。要素番号を利用したい場合
1 2 3 4 5 6 |
// コード例 String[] array = { "a", "b", "c", "d" }; for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } |
要素番号を利用しない場合(拡張for文)
1 2 3 4 5 6 |
// コード例 String[] array = { "a", "b", "c", "d" }; for (String str : array) { System.out.println(str); } |
今回は以上です。

Java入門にオススメの書籍2冊【現役エンジニアが厳選選択】
Javaでオススメの資格は「OCJ-P」です【実体験あり】