【Java】fillを使って配列(Array)の要素を一度に初期化する!
配列(Array)の要素から値を検索するにはArraysクラスのfillメソッドを使用します。
Arraysクラスのfillメソッドは、指定された配列の指定された範囲の各要素に、指定されたデータ型の値を割り当てるメソッドとなります。
配列は
1 |
int[] vaz = { 1, 2, 3 }; |
で初期化は可能ですが、fillメソッドを使用することで、配列の要素をまとめて初期化することができるので便利です。
今回はArraysクラスのfillメソッドを使って以下の場合で配列(Array)の要素を一度に初期化します。
⚫︎ 配列の全ての要素を指定した値に初期化する場合
⚫︎ 配列の一部の要素を指定した値に初期化する場合
⚫︎ 多次元配列の要素を指定した値に初期化する場合
目次
fillメソッドとは
Arrayクラスのfillメソッドとは、指定された配列の指定された範囲の各要素に、指定されたデータ型の値を割り当てるメソッドです。
fillメソッドの書き方
Aarrayクラスのfillメソッドの構文は下記となります。
1 2 3 |
import java.util.Arrays; Arrays.fill(配列, [開始インデックス, 終了インデックス], 初期化値); |
Arrayクラスをインポートすることで、Arraysクラスのメソッドを使用できます。
パラメータ
⚫︎ 配列:
初期化したい配列を指定する
⚫︎ 開始インデックス:
初期化したい配列の始まりのインデックスを指定する
⚫︎ 終了インデックス:
初期化したい配列の終わりのインデックスを指定する(初期化されるのは終了インデックス-1まで)
⚫︎ 初期化値:
何の値で初期化するかを指定する
そして、fillの()に第1パラメータとして配列を、第2パラメータとして初期化値を指定することで配列の要素を一度に初期化値へ書き換えます。
例えば、「Arrays.fill(配列, 3);」とすると、配列の要素が全て3に初期化されます。
また、開始インデックスと終了インデックスを指定することで一部の要素を初期化することがでできます。
例えば、「Arrays.fill(配列,1, 4, 3);」とすると、配列の2番目と3番目の要素が3に初期化されます。
終了インデックスの番号は初期化の領域には含まれませんので注意してください。
配列の要素を一度に初期化するサンプルコード
配列の要素から値を検索するサンプルコードを紹介します。
全ての要素を指定した値に初期化する場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 配列の要素から値を検索する import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { // 長さ5の配列を作成 int[] array1 = new int[5]; System.out.println("・ 初期化前"); System.out.println(Arrays.toString(array1)); // arrayのすべての要素を変更 Arrays.fill(array1,10); System.out.println("・ 初期化後"); System.out.println(Arrays.toString(array1)); } } |
出力結果
・ 初期化前
[0, 0, 0, 0, 0]
・ 初期化後
[10, 10, 10, 10, 10]
fillメソッドによって配列の中にある要素を全て10に初期化しています。
一部の要素を指定した値に初期化する場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 配列の要素から値を検索する import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { // 長さ5の配列を作成 int[] array2 = new int[5]; System.out.println("・ 初期化前"); System.out.println(Arrays.toString(array2)); // arrayのすべての要素をInteger.MAX_VALUE に設定 Arrays.fill(array2, 1, 3, 10); System.out.println("・ 初期化後"); System.out.println(Arrays.toString(array2)); } } |
出力結果
・ 初期化前
[0, 0, 0, 0, 0]
・ 初期化後
[0, 10, 10, 0, 0]
開始インデックスと終了インデックスを指定することによって配列の中にある一部の要素を10に初期化しています。
多次元配列の要素を一度に初期化するサンプルコード
多次元配列の要素を一度に初期化するには多重ループとfillメソッドを使用します。
fillメソッドをfor文で回すことで配列内の要素を全て初期化することができます。
二次元配列の要素を初期化する場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 配列の要素から値を検索する import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { // 長さ4の配列を作成 int[][] array1 = new int[5][5]; System.out.println("・ 初期化前"); System.out.println(Arrays.deepToString(array1)); for (int[] val : array1) { Arrays.fill(val, 12); } System.out.println("・ 初期化後"); System.out.println(Arrays.deepToString(array1)); } } |
出力結果
・ 初期化前
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
・ 初期化後
[[12, 12, 12, 12, 12], [12, 12, 12, 12, 12], [12, 12, 12, 12, 12], [12, 12, 12, 12, 12], [12, 12, 12, 12, 12]]
三次元配列の要素を初期化する場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 配列の要素から値を検索する import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { // 長さ4の配列を作成 int[][][] array2 = new int[2][2][2]; System.out.println("・ 初期化前"); System.out.println(Arrays.deepToString(array2)); for (int[][] array3 : array2) { for(int[] val : array3) { Arrays.fill(val, 12); } } System.out.println("・ 初期化後"); System.out.println(Arrays.deepToString(array2)); } } |
出力結果
・ 初期化前
[[[0, 0], [0, 0]], [[0, 0], [0, 0]]]
・ 初期化後
[[[12, 12], [12, 12]], [[12, 12], [12, 12]]]
今回のポイント
fillで配列の要素を一度に初期化
配列の要素を一度に初期化するにはArraysクラスのfillメソッドを使用する。
⚫︎ Arraysクラスのfillメソッドで配列の要素を一度に初期化を行う
⚫︎ fillメソッドは第1パラメータに配列、第2パラメータに初期化値を指定すると、配列内の要素全てに第2パラメータの値に初期化する
⚫︎ fillメソッドの第1パラメータと第2パラメータの間に開始インデックスと終了インデックスを指定すると一部の要素を初期化する
⚫︎ fillメソッドとfor文を使用することで多次元配列の要素を一度に初期化することができる
関連記事
インスタンスをコピーするcloneメソッドについてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。