こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- javaの配列の書き方について知りたい方(資格試験の対策)
- 配列のソートについて知りたい方(インスタンスを格納した配列を中心)
こんなにあるの?! javaの配列の書き方
配列の書き方は数種類あります。
Javaでの基本的な書き方を紹介します。
配列は
- 配列に代入する値が決まってない場合
- 配列に代入する値が決まっている場合
で書き方を使い分けます。
業務で使うだけであれば、省略記法を覚えるだけで十分ですが、
Javaの資格取得を考えている場合はすべての書き方を覚えることをおすすめします。
配列に代入する値が決まってない場合
省略記法
データ型[] 配列名 = new データ型[要素数];
基本構文
データ型[] 配列名;
配列名 = new データ型[要素数];
配列に代入する値が決まっていない場合は「コレクション」を使うことが多いです。
配列に代入する値が決まっている場合
省略記法
①データ型 [] 変数名 = {初期値1,初期値2,...初期値n};
②データ型[] 変数名 = new データ型[]{初期値1,初期値2,...初期値n}
基本構文
データ型[] 変数名;
変数名 = new データ型[]{初期値1,初期値2,...初期値n};
【多次元配列】配列に代入する値が決まってない場合
省略記法
データ型[][] 変数名 = new データ型[要素数][];
1次元目の要素数は省略できません。
2次元目の要素数は省略可能です。
基本構文
データ型[][] 変数名;
変数名 = new データ型[要素数][要素数];
【多次元配列】配列に代入する値が決まっている場合
省略記法
①データ型 [][] 変数名 = {{初期値1,初期値2,...初期値n},{初期値1,初期値2,...初期値n}};
②データ型 [][] 変数名 = new データ型[][]{{初期値1,初期値2,...初期値n},{初期値1,初期値2,...初期値n}};
基本構文
データ型 [][] 変数名;
変数名 = new データ型[][]{{初期値1,初期値2,...初期値n},{初期値1,初期値2,...初期値n}};
その他の記述方法
Javaでは多言語から移行してくるプログラマーのために、様々な書き方をサポートしています。
変数名の後ろに大カッコ
データ型 変数名[];
データ型 変数名[][];
データ型と変数名の後に大カッコを付けると2次元配列
データ型[] 変数名[];
データ型と変数名の後に複数の大カッコを付けると多次元配列
データ型[][] 変数名[]・・・3次元配列
配列の操作
配列の操作を行うにはArraysクラスを使用します。
使用頻度が高いメソッドとして
- asList・・・引数に指定された配列を固定のリストに変換して返します。
- sort・・・プリミティブ型の配列をソートします。
配列をリストに変換
Arrays.asList()メソッドは
引数に指定された配列を固定のリストに変換して返します。
注意したいのが固定のリストが返ってくることです。
要素を追加できないため、ArrayListインスタンスを作成して引数に渡すことで
要素の追加や削除を行えるようになります。
List<データ型> 変数名 = new ArraysList<>(Arrays.asList(値1, 値2...値n ));
配列のソート
配列のデータ型によって使用するメソッドが変わります。
- プリミティブ・・・Arraysクラスのsortメソッド
- 独自クラス・・・CompalaterインターフェースのcompareメソッドをオーバーライドしたインスタンスをArrays.sortの引数に渡す。
独自クラスのソートに使用するcompareメソッドを使いこなすには、
継承や多様性、ラムダ式やオーバーライドについて理解している必要があります。
Arraysクラスのsortメソッドのサンプル
実行結果(Arraysクラスのsortメソッドのサンプル)
test1
test2
test3
Compalaterインターフェースのcompareメソッドのサンプル
実行結果(comparator_intを渡した場合)
田中 19
伊藤 23
佐藤 25
実行結果(comparator_stringを渡した場合)
伊藤 23
佐藤 25
田中 19
独自クラスのStudentクラスをageの若い順からソートするプログラムです。
Compalaterインターフェースのcompareメソッドをオーバーライドしたインスタンスを作成する方法は、
- 匿名クラス
- ラムダ式
で記述することが一般的です。
compareメソッドはどんな条件でソートをしたいのかを記述します。
今回は
- ①Integer.compareメソッドを使用してStudentの年齢を比較
- ②StringクラスのcompareToメソッドを使用して名前の比較
をするインスタンスを作成してArrays.sortメソッドに渡しています。