Višedimenzionalni nizovi u Javi

1. Pregled

Višedimenzionalni niz u Javi je niz koji kao svoje elemente sadrži nizove različitih veličina. Također se naziva i "nizom nizova" ili "razbarušenim nizom" ili "nazubljenim nizom".

U ovom ćemo brzom vodiču detaljnije razmotriti definiranje i rad s višedimenzionalnim nizovima.

2. Stvaranje višedimenzionalnog niza

Počnimo s gledanjem načina na koje možemo stvoriti višedimenzionalni niz:

2.1. Stenografski obrazac

Jednostavan način definiranja višedimenzionalnog niza bio bi:

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

Evo, proglasili smo i inicijalizirali multiDimensionalArr u jednom koraku.

2.2. Izjava, a zatim inicijalizacija

Počinjemo deklariranjem višedimenzionalnog niza veličine tri:

int [] [] multiDimensionalArr = novo int [3] [];

Ovdje, izostavili smo specificirati drugu dimenziju jer će ona varirati.

Dalje, idemo dalje deklariranjem i inicijalizacijom odgovarajućih elemenata unutar multiDimensionalArr:

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

Također možemo jednostavno deklarirati njegove elemente bez inicijalizacije:

multiDimensionalArr [0] = novi int [2]; multiDimensionalArr [1] = novi int [3]; multiDimensionalArr [2] = novi int [4];

Zatim se mogu kasnije inicijalizirati, na primjer korištenjem korisničkih unosa.

Također možemo koristiti java.util.Arrays.fill metoda za inicijalizaciju elemenata niza:

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

Svi se elementi u nizovima inicijaliziraju s istom vrijednošću.

3. Predstavljanje memorije

Kako će memorijski prikaz našeg multiDimensionalArr izgledati?

Kao što znamo, niz u Javi nije ništa drugo do objekt čiji elementi mogu biti primitivi ili reference. Dakle, dvodimenzionalni niz u Javi može se smatrati nizom jednodimenzionalnih nizova.

Naše multiDimensionalArr u sjećanju bi izgledao slično:

Jasno, multiDimensionalArr[0] sadrži referencu na jednodimenzionalni niz veličine 2, višedimenzionalni arr [1] sadrži referencu na drugi jednodimenzionalni niz veličine 3 i tako dalje.

Na taj nam način Java omogućuje definiranje i upotrebu višedimenzionalnih nizova.

4. Iteriranje elemenata

Možemo ponoviti višedimenzionalni niz slično kao i bilo koji drugi niz u Javi.

Pokušajmo ponoviti i inicijalizirati multiDimensionalArr elementi koji koriste korisničke unose:

void initializeElements (int [] [] multiDimensionalArr) {Skener sc = novi Skener (System.in); za (int vanjski = 0; vanjski <multiDimensionalArr.length; vanjski ++) {za (int unutarnji = 0; unutarnji <multiDimensionalArr [vanjski] .duljina; unutarnji ++) {multiDimensionalArr [vanjski] [unutarnji] = sc.nextInt (); }}}

Ovdje, multiDimensionalArr [vanjska] .duljina je duljina niza u indeksu vanjski u multiDimensionalArr.

Pomaže nam da osiguramo da elemente tražimo samo unutar valjanog raspona svake podniza, čime se izbjegava ArrayIndexOutOfBoundException.

5. Ispis elemenata

Što ako želimo ispisati elemente našeg višedimenzionalnog niza?

Jedan očiti način bio bi korištenje logike iteracije koju smo već obradili. To uključuje iteraciju kroz svaku stavku u našem višedimenzionalnom nizu, koji je sam po sebi niz, a zatim iteraciju nad tim podređenim nizom - jedan po jedan element.

Druga mogućnost koju imamo je korištenje java.util.Arrays.toString () pomoćna metoda:

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

I na kraju imamo čist i jednostavan kod. Generirani izlaz konzole izgledao bi ovako:

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

6. Duljina elemenata

Duljinu nizova možemo pronaći u višedimenzionalnom nizu prevlačenjem po glavnom nizu:

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

Duljinu nizova također možemo pronaći pomoću Java streamova:

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

7. Kopirajte 2-D niz

2-D niz možemo kopirati pomoću Nizovi.kopijaOf metoda:

int [] [] copy2DArray (int [] [] arrayOfArrays) {int [] [] kopirano2DArray = novo int [arrayOfArrays.length] []; for (int i = 0; i <arrayOfArrays.length; i ++) {int [] array = arrayOfArrays [i]; kopirano2DArray [i] = Arrays.copyOf (niz, niz.duljina); } povratak kopirano2DArray; }

To također možemo postići korištenjem Java streamova:

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

8. Zaključak

U ovom smo članku pogledali što su višedimenzionalni nizovi, kako izgledaju u memoriji i načine na koje ih možemo definirati i koristiti.

Kao i uvijek, izvorni kod prikazanih primjera može se naći na GitHubu.