1.概要

Javaのギザギザ配列は、さまざまなサイズの配列を要素として含む多次元配列です。これは、「配列の配列」または「不規則配列」とも呼ばれます。

このクイックチュートリアルでは、ギザギザ配列の定義と操作についてさらに詳しく説明します。

2.ギザギザ配列の作成

まず、ギザギザ配列を作成する方法を見てみましょう。

2.1. 短縮形の使い方

ギザギザ配列を定義する簡単な方法は次のとおりです。

int[][]jaggedArr = {{1, 2}, {3, 4, 5}, {6, 7, 8, 9}};

ここでは、

jaggedArr

を宣言して初期化しました。

2.2. 宣言とその後の初期化

サイズ3のギザギザ配列を宣言することから始めます。

int[][]jaggedArr = new int[3][];

ここでは、2つ目の寸法は異なるので** 指定することは省略しました。

次に、

jaggedArr

内のそれぞれの要素を宣言して初期化します。

jaggedArr[0]= new int[]{1, 2};
jaggedArr[1]= new int[]{3, 4, 5};
jaggedArr[2]= new int[]{6, 7, 8, 9};

初期化せずに単純にその要素を宣言することもできます。

jaggedArr[0]= new int[2];
jaggedArr[1]= new int[3];
jaggedArr[2]= new int[4];

これらは後で、たとえばユーザー入力を使用して初期化できます。

3.メモリ表現


jaggedArr

のメモリ表現はどのようになりますか?

私たちが知っているように、Javaの配列はオブジェクトに他なりません。その要素はプリミティブか参照のいずれかです。したがって、Javaの2次元配列は1次元配列の配列と考えることができます。

メモリ内の

jaggedArr

は、次のようになります。

リンク:/uploads/JaggedArray1-100×57.png%20100w[]

明らかに、

jaggedArr[0]

はサイズ2の1次元配列への参照を保持しており、

jaggedArr[1]

はサイズ3の別の1次元配列への参照を保持しています。

このようにして、Javaは私たちがギザギザ配列を定義して使うことを可能にします。

4.繰り返し要素

Javaの他の多次元配列と同じように、ギザギザ配列を反復できます。

ユーザー入力を使用して

jaggedArr

要素を繰り返し初期化してみましょう。

void initializeElements(int[][]jaggedArr) {
    Scanner sc = new Scanner(System.in);
    for (int outer = 0; outer < jaggedArr.length; outer++) {
        for (int inner = 0; inner < jaggedArr[outer].length; inner++) {
            jaggedArr[outer][inner]= sc.nextInt();
        }
    }
}

ここで、

jaggedArr[outer].length

は、

jaggedArr

のインデックス

outer

にある配列の長さです。

  • 各サブ配列の有効範囲内でのみ要素を検索していることを確認するのに役立ちます。これにより、

    ArrayIndexOutOfBoundException

    が回避されます。

5.印刷要素

ギザギザ配列の要素を印刷したい場合はどうなりますか?

明らかな方法の1つは、既に説明した反復ロジックを使用することです。これは、それ自体が配列であるギザギザ配列内の各項目を反復処理し、次にその子配列(一度に1要素ずつ)を反復処理することを含みます。

もう1つの選択肢は、

java.util.Arrays.toString()

ヘルパーメソッドを使用することです。

void printElements(int[][]jaggedArr) {
    for (int index = 0; index < jaggedArr.length; index++) {
        System.out.println(Arrays.toString(jaggedArr[index]));
    }
}

そして、私たちはきれいでシンプルなコードを手に入れることになります。生成されたコンソール出力は次のようになります。

----[1, 2][3, 4, 5][6, 7, 8, 9]----

6.まとめ

この記事では、ギザギザ配列とは何か、それらがメモリ内でどのように見えるか、そしてそれらを定義して使用する方法について調べました。

いつものように、提示された例のソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-arrays[Githubに追加]を見つけることができます。