Többdimenziós tömbök Java-ban

1. Áttekintés

A Java-ban egy többdimenziós tömb egy tömb, amely különböző méretű tömböket tartalmaz elemként. Más néven „tömbtömb”, „rongyos tömb” vagy „szaggatott tömb”.

Ebben a gyors bemutatóban részletesebben áttekintjük a többdimenziós tömbök meghatározását és azokkal való munkát.

2. Többdimenziós tömb létrehozása

Kezdjük azzal, hogy megvizsgáljuk, hogyan hozhatunk létre többdimenziós tömböt:

2.1. A gyorsírás-forma

A többdimenziós tömb meghatározásának egyszerű módja a következő lenne:

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

Itt deklaráltuk és inicializáltuk multiDimensionalArr egyetlen lépésben.

2.2. Nyilatkozat, majd inicializálás

Egy háromdimenziós tömb deklarálásával kezdjük:

int [] [] multiDimensionalArr = új int [3] [];

Itt, kihagytuk a második dimenzió megadását, mivel változni fog.

Ezután menjünk tovább mind a megfelelő elemek deklarálásával, mind inicializálásával multiDimensionalArr:

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

Elemeit is egyszerűen deklarálhatjuk inicializálás nélkül:

multiDimensionalArr [0] = új int [2]; multiDimensionalArr [1] = új int [3]; multiDimensionalArr [2] = új int [4];

Ezeket később inicializálni lehet, például felhasználói bemenetek segítségével.

Használhatjuk a java.util.Arrays.fill módszer a tömb elemek inicializálására:

void initialize2DArray (int [] [] multiDimensionalArray) {for (int [] tömb: multiDimensionalArray) {tömbök.kitöltés (tömb, 7); }} 

A tömbök összes elemét azonos értékkel inicializálják.

3. Memória ábrázolás

Hogyan lesz a memória ábrázolása multiDimensionalArr hasonló?

Mint tudjuk, a Java tömbje nem más, mint objektum, amelynek elemei lehetnek primitívek vagy referenciák. Tehát a Java kétdimenziós tömbje egydimenziós tömbök tömbjének tekinthető.

A mi multiDimensionalArr emlékezetében hasonlítana a következőkre:

Tisztán, multiDimensionalArr[0] referenciája van egy 2-es méretű egydimenziós tömbre, multiDimensionalArr [1] hivatkozást tartalmaz egy másik, 3-as méretű egydimenziós tömbre és így tovább.

Így a Java lehetővé teszi számunkra a többdimenziós tömbök definiálását és használatát.

4. Iteráló elemek felett

Iterálhatunk egy többdimenziós tömböt, hasonlóan a Java bármely más tömbjéhez.

Próbáljuk meg iterálni és inicializálni a multiDimensionalArr felhasználói bemeneteket használó elemek:

void InitializeElements (int [] [] multiDimensionalArr) {Szkenner sc = új Szkenner (System.in); mert (int külső = 0; külső <többdimenziósArr.length; külső ++) {for (int belső = 0; belső <multiDimensionalArr [külső] .hossz; belső ++) {multiDimensionalArr [külső] [belső] = sc.nextInt (); }}}

Itt, multiDimensionalArr [külső] .hossz egy tömb hossza egy indexen külső ban ben multiDimensionalArr.

Segít abban, hogy csak az egyes résztömbök érvényes tartományán belül keressünk elemeket, ezzel elkerülve az ArrayIndexOutOfBoundException.

5. Elemek nyomtatása

Mi van, ha ki akarjuk nyomtatni a többdimenziós tömb elemeit?

Az egyik nyilvánvaló módszer az iterációs logika használata, amelyet már lefedtünk. Ez magában foglalja a többdimenziós tömb minden elemén keresztüli iterációt, amely maga is egy tömb, majd az adott gyermek tömbön - egyszerre egy elemen - keresztül kell iterálni.

Egy másik lehetőségünk van használni java.util.Arrays.toString () segítő módszer:

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

És végül tiszta és egyszerű kóddal rendelkezünk. A létrehozott konzol kimenete a következőképpen néz ki:

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

6. Az elemek hossza

Megtalálhatjuk a tömbök hosszát egy többdimenziós tömbben, ha iterálunk a fő tömb felett:

int [] findLengthOfElements (int [] [] multiDimensionalArray) {int [] arrayOfLengths = új int [multiDimensionalArray.length]; for (int i = 0; i <multiDimensionalArray.length; i ++) {arrayOfLengths [i] = multiDimensionalArray [i] .hossz; } return arrayOfLengths; }

Megtalálhatjuk a tömbök hosszát is a Java adatfolyamok segítségével:

Egész szám [] findLengthOfArrays (int [] [] multiDimensionalArray) {return tömbök.stream (multiDimensionalArray) .térkép (tömb -> tömb.hossz) .toArray (egész szám [] :: új); }

7. Másoljon egy 2-D tömböt

Másolhatunk egy 2-D tömböt a Tömbök.copyOf módszer:

int [] [] copy2DArray (int [] [] arrayOfArrays) {int [] [] copy2DArray = új int [arrayOfArrays.length] []; for (int i = 0; i <arrayOfArrays.length; i ++) {int [] tömb = arrayOfArrays [i]; copied2DArray [i] = Tömbök.copyOf (tömb, tömb.hossz); } return copyied2DArray; }

Ezt Java streamek használatával is elérhetjük:

Egész [] [] copy2DArray (Integer [] [] arrayOfArrays) {return Arrays.stream (arrayOfArrays) .map (tömb -> Arrays.copyOf (tömb, tömb.hossz)) .toArray (Integer [] [] :: új ); }

8. Következtetés

Ebben a cikkben megvizsgáltuk, hogy melyek a többdimenziós tömbök, hogyan néznek ki a memóriában, és milyen módon tudjuk meghatározni és használni őket.

Mint mindig, a bemutatott példák forráskódja megtalálható a GitHub oldalon.


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