Javaの配列はややこしいのでまとめてみました。
配列の宣言方法
配列の宣言には大カッコ[]
を使います。
データ型の後ろに記述するパターンと変数名の後ろに記述するパターンの2通りあります。
Java
int[] array;//データ型の後ろに大カッコを記述するパターン。
int array[];//変数名の後ろに大カッコを記述するパターン。
多次元配列の場合は、大カッコ[]
の数で次元数を表します。
Java
int[][] arrayA;//2次元配列の宣言
int arrayB[][][];//3次元配列の宣言
また、多次元配列の場合は、大カッコ[]
を一度にまとめて記述する必要は無く、
データ型と変数名の後ろに分けて記述することができます。
Java
int[] arrayA[];//1+1で2次元配列の宣言
int[][] arrayB[];//2+1で3次元配列の宣言
配列インスタンスの生成方法
配列インスタンスの生成には以下のルールがあります。
- 配列インスタンスの生成には必ず要素数を指定すること。
- 要素数の指定はint型の整数値でなければならず、
浮動小数点や、整数値であってもlong型は記述できないこと。 - 多次元配列の場合は、変数の次元数と参照先の次元数が一致すること。
以下はコンパイルエラーになります。
Java
int[] arrayA = new int[];//要素数がないのでコンパイルエラー
int[] arrayB = new int[2.3];//浮動小数点を記述しているのでコンパイルエラー
int[][] arrayC = new int[]{};//次元数が一致してないのでコンパイルエラー。
データ型に書く
[]
は要素数を表し、変数に書く[]
は添字を表します。多次元配列の場合、1次元目の要素数は省略できませんが、2次元目の要素数を省略して別々のタイミングで生成することが可能です。
Java
int[][] arrayA = new array[3][];//2次元目の要素数が無くても可。
array[0] = new int[3];
array[1] = new int[3];
array[2] = new int[3];
int[][] arrayB = new array[][3];//1次元目の要素数がない場合はコンパイルエラー。
配列インスタンスの生成と同時に要素の値を初期化したい場合は、初期化演算子{}
を使います。
Java
int[] arrayA = new int[] {10,20,30};//パターン1
int[] arrayB = {10,20,30};//パターン2
newと初期化演算子の両方を使った場合は、要素数を指定することはできません。
なぜかというと、初期化演算子の中に記述した値の数によって自動的に配列の要素数が決まるからです。
そのため、次のように記述するとコンパイルエラーとなります。
Java
int[] array = new int[3] {10,20,30};//要素数を指定するとコンパイルエラー。
要素数0の配列
要素数0の配列は、インスタンス的には何の意味もありませんが、文法上間違っているわけではないのでコンパイルが通ります。
以下の書き方はどちらも様子数0の配列を意味します。
Java
int[] arrayA = {};
int[] arrayC = new int[0];
配列の繰り返し処理(ループ処理)
配列の繰り返し処理(ループ処理)を行うには、拡張for文を用いて以下のように記述します。
Java
String[] array = { "AAPL", "AMZN", "MSFT" };
for(String str : array) {
System.out.println(str); //AAPL AMZN MSFTの順に出力される。
}
配列のソート
配列をソートするには、Arrays#sort
を使用します。
Java
int[] array = {10,3,5,8,1,2,9,11,15};
Arrays.sort(array);
System.out.println(Arrays.toString(array));//[1, 2, 3, 5, 8, 9, 10, 11, 15] が出力される。
配列のシャローコピーとディープコピー
以下の記事にまとめました。
配列を比較する
配列同士を比較するにはObjects.deepEquals()
を使用します。
中身の値が同じであればインスタンスが異なっていてもtrueを返します。
Java
String[][] array1 = {{"10", "20"}, {"30", "40"}};
String[][] array2 = {{"10", "20"}, {"30", "40"}};
System.out.println(array1 == array2);//false
System.out.println(Objects.deepEquals(array1, array2));//true
配列をリストに変換する
配列をリストに変換するにはArrays.asList(array)
を使用します。
Java
String[] array = {"apple","orange"};
List<String> list = Arrays.asList(array);
System.out.println(list);//[apple, orange]
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!