Многомерные массивы в Java

В Java можно объявить массив массивов, известный как многомерный массив. К примеру:

int[][] a = new int[3][4];

Здесь мы видим двухмерный массив Java, который может содержать до 12 элементов типа int:

java-2d-array

Не забывайте, что индексирование в Java начинается с нуля, поэтому первые элементы массива имеют индекс 0, а не 1.

Аналогично можно объявить и трёхмерный (3D) массив. Например:

String[][][] personalInfo = new String[3][4][2];

В примере выше personalInfo — это трёхмерный массив, в котором может быть до 24 (3*4*2) элементов типа String.

В Java составляющие многомерного массива — это тоже массивы. Если вы знаете C/C++, то может показаться, что многомерные массивы в Java и C/C++ работают одинаково. Но это не совсем так — в Java ряды массивов могут быть разной длины. Разницу мы увидим во время инициализации.

Как инициализировать двумерный массив в Java?

Ниже приводится пример инициализации двумерного массива Java:

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

Каждый компонент массива также представляет собой массив, и длина каждого ряда отличается:

2d-array-variable-length

Давайте напишем программу, чтобы это доказать:

class MultidimensionalArray {
   public static void main(String[] args) {

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

      System.out.println("Длина ряда 1: " + a[0].length);
      System.out.println("Длина ряда 2: " + a[1].length);
      System.out.println("Длина ряда 3: " + a[2].length);
   }
}

При запуске этой программы мы получим:

Длина ряда 1: 3
Длина ряда 2: 4
Длина ряда 3: 1

Поскольку многомерный массив состоит из отдельных массивов (a[0], a[1] and a[2]), можно использовать метод length для определения длины каждого ряда длины двумерного массива Java.

Пример: вывод на экран всех элементов двумерного массива с помощью циклов:

class MultidimensionalArray {
   public static void main(String[] args) {

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

     for (int i = 0; i < a.length; ++i) {
        for(int j = 0; j < a[i].length; ++j) {
           System.out.println(a[i][j]);
        }
     }
   }
}

Всегда лучше использовать цикл for…each, когда нужно пройти по элементам массива. Пример сортировки двумерного массива Java можно записать с помощью цикла for…each следующим образом:

class MultidimensionalArray {
   public static void main(String[] args) {

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

     for (int[] innerArray: a) {
        for(int data: innerArray) {
           System.out.println(data);
        }
     }
   }
}

При запуске этой программы мы получим следующий результат заполнения двумерного массива Java:

1
-2
3
-4
-5
6
9
7

Как инициализировать трёхмерный массив в Java?

Трёхмерный массив инициализируется почти так же, как двухмерный:

// test — трёхмерный массив
int[][][] test = {
              {
               {1, -2, 3}, 
               {2, 3, 4}
              }, 
              { 
               {-4, -5, 6, 9}, 
               {1}, 
               {2, 3}
              } 
};

Трёхмерный массив — это массив, состоящий из двумерных массивов. Как и у двумерных массивов Java, его ряды могут быть различной длины.

Пример: программа для вывода элементов трёхмерного массива с помощью циклов:

class ThreeArray {
   public static void main(String[] args) {

     // test – трёхмерный массив
     int[][][] test = {
              {
               {1, -2, 3}, 
               {2, 3, 4}
              }, 
              { 
               {-4, -5, 6, 9}, 
               {1}, 
               {2, 3}
              } 
     };

     // цикл for..each проходит по элементам трёхмерного массива
     for (int[][] array2D: test) {
        for (int[] array1D: array2D) {
           for(int item: array1D) {
              System.out.println(item);
           }
        }
     }
  }
}

При запуске программы вывода двумерного массива Java получаем следующий результат:

1
-2
3
2
3
4
-4
-5
6
9
1
2
3

Перевод статьи “Java Multidimensional Arrays” был подготовлен дружной командой проекта Сайтостроение от А до Я.