Javaに関する様々な情報をご紹介します。

32次元配列

Javaに関する様々な情報をご紹介します。

2次元配列

Javaでは2次元配列を作成することができます。このページでは、2次元配列の宣言・生成方法、2次元配列のコピーの方法について説明を行います。

概要

Javaでは2次元配列は配列の配列という形をとっています。つまり1次元配列の各要素にもう一つの配列があると言う形です。

2次元配列_1

もう一つの配列のサイズがそれぞれ同じである必要はありません。但し、データ管理が複雑になるため、あまりお勧めはできません。

2次元配列_2

2次元配列の宣言・生成

2次元配列も1次元配列と同様に配列の宣言、宣言した配列オブジェクトに対する生成という手順をとります。2次元配列は上位配列(1次元配列)と下位配列(1次元配列の中の配列)を同時に生成することもできますし、別々に生成することもできます。上位配列と下位配列を別々に生成する場合は各回配列のサイズが同じでない場合などに使用します。

【例1】上位配列と下位配列を同時に生成する場合。

int[][] int2Array = new int[10][5];
//int型の2次元配列int2Arrayを宣言・生成。
//上位配列のサイズは10、下位配列のサイズは5です。

String[][] string2Array = { {"Sunday", "Monday"},
    {"Monday", "Tuesday"} };
//初期化子を指定して2次元配列を宣言・生成することもできます。 

【例2】上位配列と下位配列を別々に生成する場合。

double[][] double2Array = new double[5][];
//double型の2次元配列double2Arrayを宣言し、上位配列のみを生成。

double2Array[0] = new double[10];
double2Array[1] = new double[8];
double2Array[2] = new double[9];
double2Array[3] = new double[8];
double2Array[4] = new double[9];
//下位配列のみを生成。

2次元配列のコピー

ここではある2次元配列を他の2次元配列へコピーする方法をforループを使用した場合とarraycopyメソッドを使用した場合のそれぞれについて説明します。

【例3】forループを使用した2次元配列のコピー方法について例示します。

public class ExArray6 {
    public static void main(String[] args) {
        char[][] from2Char = { {'A', 'B', 'C', 'D', 'E'},   //(1)
            {'F', 'G', 'H', 'I', 'J'},
            {'K', 'L', 'M', 'N', 'O'} };
        char[][] to2Char = new char[from2Char.length][];   //(2)

        //forループ内でto2Charの下位配列の生成を行う。
        for(int i=0; i < from2Char.length; i++) {   //(3)
            to2Char[i] = new char[from2Char[i].length];

            //forループ内でfrom2Charからto2Charへデータのコピーを行う。
            for (int j=0; j < from2Char[i].length; j++) {    //(4)
                to2Char[i][j] = from2Char[i][j];
            }
        }

        for(int i=0; i < to2Char.length; i++) {   //(5)
            for(int j=0; j < to2Char[i].length; j++) {
                System.out.print(to2Char[i][j] + " ");
            }
            System.out.println();
        }
    }
}

解説3

  1. (1)コピー元であるchar型の2次元配列from2Charを初期化子を使用し、宣言・生成します。
  2. (2)コピー先であるchar型の2次元配列to2Charを宣言し、上位配列のみを生成します。
  3. (3)from2Charの上位配列のサイズ分forループし、該当するfrom2Charの下位配列のサイズを引数にto2Charの下位配列を生成します。
  4. (4)from2Charの各下位配列のサイズ分forループします。ループ内でコピー元2次元配列の各要素をコピー先の2次元配列の各要素へコピーしています。
  5. (5)正しくコピーされたかprintメソッドを使用し確認しています。

実行結果3

D:\JAVA>javac ExArray6.java

D:\JAVA>java ExArray6
A B C D E
F G H I J
K L M N O

D:\JAVA>

【例4】arraycopyメソッドを使用した2次元配列のコピー方法について例示します。

public class ExArray7 {
    public static void main(String[] args) {
        String[][] from2String = { {"Japan", "Jamaica"},   //(1)
            {"UnitedStates", "Uzbekistan"},
            {"Chile", "China", "Canada"} };
        String[][] to2String = new String[from2String.length][]; //(2)

        for(int i=0; i < from2String.length; i++) {   //(3)
            to2String[i] = new String[from2String[i].length];
            //該当するfrom2Stringの上位配列の要素を
            //to2Stringへコピーする。
            System.arraycopy(from2String[i], 0,
                to2String[i], 0, from2String[i].length);
        }

        for(int i=0; i < to2String.length; i++) {   //(4)
            for(int j=0; j < to2String[i].length; j++) {
                System.out.print(to2String[i][j] + " ");
            }
            System.out.println();
        }
    }
}

解説4

  1. (1)コピー元であるString型の2次元配列from2Stringを初期化子を使用し、宣言・生成します。
  2. (2)コピー先であるchar型の2次元配列to2Stringを宣言し、上位配列のみを生成します。
  3. (3)from2Charの上位配列のサイズ分forループします。ループ内で該当するfrom2Stringの下位配列のサイズを引数にto2Stringの下位配列を生成します。その後arraycopyメソッドを使用し、該当する上位配列の要素ずつfrom2Stringからto2Stringへコピーを行います。
  4. (4)正しくコピーされたかprintメソッドを使用し確認しています。

実行結果4

D:\JAVA>javac ExArray7.java

D:\JAVA>java ExArray7
Japan Jamaica
UnitedStates Uzbekistan
Chile China Canada

D:\JAVA>

32次元配列