Многомерные массивы в Java отличаются своим объявлением от языков Си и Паскаль.
Многомерные массивы – это массивы массивов.
Int mx[][] = new int[4][];
При распределемии памяти необходимо указать величину первого крайнего сверху. Измерение под остальные память можно распределять отдельно.
mx[0] = new int [5];
mx[1] = new int [4];
mx[2] = new int [2];
mx[3] = new int [9];
Для каждого массива количество может быть своим. Такие массивы называют нерегулярными или ступенчатыми. Это полездно при инициализации разряженных массивов (где используются не все элементы) .
При инициализации можно использовать константу и переменную.
int x = 10;
int i = 0;
int mx[][]= { {x*i++, x*i++}, {x*i++, x*i++}};
Или можно так:
int x = 10;
int i = 0;
int mx[][]= new int[][] { {x*i++, x*i++}, {x*i++, x*i++}};
Альтернативный систаксис
Альтернативную форму объявления массивов удобно использовать
int [] a1,a2,a3;
int [][]mx1 = new int [2][2],
mx2 =new int [3][4],
mx3,mx4 = {{1,2,3},{4,5},{6}};
int mx11[][] = new int[2][2];
int[]mx111 = mew int[2][2];
В языке Java не допускаются указатели (*).
Итерации в многомерном массиве
Усовершенствованный цикл for применим к многомерным массивам, так как многомерные массивы состоят из подмассивов. Тип итерационной переменной должен быть совместим с типом полученного масива.
Для выполнения итерации в массиве размерностью N, получаемые объекты будут массивами размернотю N-1, что должен придемонстрировать рассмотренный пример:
class Main{
public static void main(String[] args) {
int [][] mx4 = {{1,2,3},{4,5},{6}};
for (int [] x:mx4){
System.out.printf("len = %d:", x.length);
for (int z:x){
System.out.printf(" %d:", z);
System.out.println();
}
}
}
}
Набор операций с массивами. Поверхностное копирование
В случае с массивом объекта копируются только ссылки
int[] a = {1,2,3,4}, b = {9,8};
System.arraycopy(b, 0, a, 2, b.length);
System.out.println(Arrays.toString(a)); //1,2,9,8
Массивы равны если количество элементов одинакаово и соответствующие элементы эквивалентны.
int [] c = {1,2,3}, d= {1,2,3}, e = {1,2};
System.out.println(Arrays.equals(c,d)); //true
System.out.println(Arrays.equals(d,e)); //false