Viacrozmerné polia v Jave

1. Prehľad

Viacrozmerné pole v Jave je pole obsahujúce ako prvky pole rôznych veľkostí. Označuje sa tiež ako „pole polí“ alebo „členité pole“ alebo „zubaté pole“.

V tomto rýchlom výučbe sa pozrieme podrobnejšie na definovanie a prácu s viacrozmernými poľami.

2. Vytvorenie viacrozmerného poľa

Na úvod sa pozrime na spôsoby, ako môžeme vytvoriť viacrozmerné pole:

2.1. Stenografická forma

Jednoduchý spôsob, ako definovať viacrozmerné pole, by bol:

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

Tu sme deklarovali a inicializovali multiDimensionalArr v jednom kroku.

2.2. Vyhlásenie a potom inicializácia

Začneme vyhlásením mnohorozmerného poľa veľkosti tri:

int [] [] multiDimensionalArr = nový int [3] [];

Tu, druhú dimenziu sme vynechali, pretože sa bude líšiť.

Ďalej poďme ďalej deklaráciou a inicializáciou príslušných prvkov vo vnútri multiDimensionalArr:

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

Môžeme tiež jednoducho deklarovať jeho prvky bez ich inicializácie:

multiDimensionalArr [0] = nový int [2]; multiDimensionalArr [1] = nový int [3]; multiDimensionalArr [2] = nový int [4];

Tie sa potom dajú neskôr inicializovať, napríklad pomocou vstupov používateľa.

Môžeme tiež použiť java.util.Arrays.fill metóda na inicializáciu prvkov poľa:

void initialize2DArray (int [] [] multiDimensionalArray) {for (int [] array: multiDimensionalArray) {Arrays.fill (array, 7); }} 

Všetky prvky v poliach sú inicializované s rovnakou hodnotou.

3. Reprezentácia pamäte

Ako bude pamäťová reprezentácia našich multiDimensionalArr vyzerať ako?

Ako vieme, pole v Jave nie je nič iné ako objekt, ktorého prvkami môžu byť buď primitívy, alebo odkazy. Takže na dvojrozmerné pole v Jave sa dá myslieť ako na pole jednorozmerných polí.

Náš multiDimensionalArr v pamäti by vyzeral podobne ako:

Jasne, multiDimensionalArr[0] drží odkaz na jednorozmerné pole veľkosti 2, multiDimensionalArr [1] obsahuje odkaz na ďalšie jednorozmerné pole veľkosti 3 atď.

Týmto spôsobom nám Java umožňuje definovať a používať viacrozmerné polia.

4. Iterácia nad prvkami

Môžeme iterovať viacrozmerné pole podobne ako ktorékoľvek iné pole v Jave.

Skúsme iteráciu a inicializáciu súboru multiDimensionalArr prvky pomocou vstupov používateľa:

void initializeElements (int [] [] multiDimensionalArr) {Scanner sc = new Scanner (System.in); pre (int vonkajší = 0; vonkajší <multiDimensionalArr.length; vonkajší ++) {pre (int vnútorný = 0; vnútorný <multiDimensionalArr [vonkajší]. dĺžka; vnútorný ++) {multiDimensionalArr [vonkajší] [vnútorný] = sc.nextInt (); }}}

Tu, multiDimensionalArr [vonkajší] .dĺžka je dĺžka poľa v indexe vonkajšie v multiDimensionalArr.

Pomáha nám zabezpečiť, že hľadáme prvky iba v platnom rozsahu každého podskupiny, čím sa vyhnete ArrayIndexOutOfBoundException.

5. Tlač prvkov

Čo ak chceme vytlačiť prvky nášho viacrozmerného poľa?

Jedným zo zrejmých spôsobov by bolo použitie iteračnej logiky, ktorú sme už pokryli. To zahŕňa iteráciu cez každú položku v našom multidimenzionálnom poli, ktorá sama o sebe je poľom, a následnú iteráciu cez toto podradené pole - jeden prvok po druhom.

Ďalšou možnosťou, ktorú máme, je použitie java.util.Arrays.toString () pomocná metóda:

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

A nakoniec budeme mať čistý a jednoduchý kód. Generovaný výstup z konzoly bude vyzerať takto:

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

6. Dĺžka prvkov

Dĺžku polí môžeme nájsť vo viacrozmernom poli iteráciou cez hlavné pole:

int [] findLengthOfElements (int [] [] multiDimensionalArray) {int [] arrayOfLengths = new int [multiDimensionalArray.length]; pre (int i = 0; i <multiDimensionalArray.length; i ++) {arrayOfLengths [i] = multiDimensionalArray [i] .length; } return arrayOfLengths; }

Dĺžku polí môžeme zistiť aj pomocou tokov Java:

Integer [] findLengthOfArrays (int [] [] multiDimensionalArray) {return Arrays.stream (multiDimensionalArray) .map (array -> array.length) .toArray (Integer [] :: new); }

7. Skopírujte 2-D pole

Môžeme skopírovať 2-D pole pomocou Polia.kopie z metóda:

int [] [] copy2DArray (int [] [] arrayOfArrays) {int [] [] copied2DArray = nový int [arrayOfArrays.length] []; pre (int i = 0; i <arrayOfArrays.length; i ++) {int [] pole = arrayOfArrays [i]; copied2DArray [i] = Arrays.copyOf (pole, pole.length); } návrat skopírovaný2DArray; }

To môžeme dosiahnuť aj pomocou streamov Java:

Integer [] [] copy2DArray (Integer [] [] arrayOfArrays) {return Arrays.stream (arrayOfArrays) .map (array -> Arrays.copyOf (array, array.length)) .toArray (Integer [] [] :: new ); }

8. Záver

V tomto článku sme sa pozreli na to, čo sú viacrozmerné polia, ako vyzerajú v pamäti a na spôsoby, ako ich môžeme definovať a používať.

Zdrojový kód uvádzaných príkladov nájdete ako vždy na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found