Багатовимірні масиви в 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{
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