Flerdimensjonale matriser i Java

1. Oversikt

En flerdimensjonal matrise i Java er en matrise som består av matriser av forskjellige størrelser som elementene. Det er også referert til som "en rekke arrays" eller "ragged array" eller "takkede array".

I denne raske opplæringen vil vi se nærmere på å definere og jobbe med flerdimensjonale matriser.

2. Opprette flerdimensjonal matrise

La oss starte med å se på måter vi kan lage et flerdimensjonalt utvalg på:

2.1. Shorthand-Form

En enkel måte å definere en flerdimensjonal matrise på vil være:

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

Her har vi erklært og initialisert flerdimensjonalArr i et enkelt trinn.

2.2. Erklæring og deretter initialisering

Vi starter med å erklære et flerdimensjonalt utvalg av størrelse tre:

int [] [] multiDimensionalArr = ny int [3] [];

Her, Vi har utelatt å spesifisere den andre dimensjonen siden den vil variere.

La oss nå gå videre ved både å erklære og initialisere de respektive elementene i flerdimensjonalArr:

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

Vi kan også bare erklære elementene uten å initialisere dem:

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

Disse kan deretter senere initialiseres, for eksempel ved å bruke brukerinnganger.

Vi kan også bruke java.util.Arrays.fyll metode for å initialisere matriseelementer:

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

Alle elementene i matriser er initialisert med samme verdi.

3. Minnesrepresentasjon

Hvordan vil hukommelsesrepresentasjonen av vår flerdimensjonalArr ser ut som?

Som vi vet er en matrise i Java ikke annet enn et objekt, hvis elementer kan være enten primitiver eller referanser. Så, et todimensjonalt array i Java kan betraktes som et utvalg av endimensjonale arrays.

Våre flerdimensjonalArr i minnet ser ut som:

Helt klart, flerdimensjonalArr[0] holder en referanse til en enkeltdimensjonal matrise av størrelse 2, multiDimensionalArr [1] har en referanse til et annet endimensjonalt utvalg av størrelse 3 og så videre.

På denne måten gjør Java det mulig for oss å definere og bruke flerdimensjonale matriser.

4. Iterere over elementer

Vi kan gjenta en flerdimensjonal matrise omtrent som alle andre matriser i Java.

La oss prøve å itere og initialisere flerdimensjonalArr elementer som bruker brukerinnganger:

void initializeElements (int [] [] multiDimensionalArr) {Scanner sc = new Scanner (System.in); for (int ytre = 0; ytre <multiDimensionalArr.length; ytre ++) {for (int indre = 0; indre <multiDimensionalArr [ytre] .lengde; indre ++) {multiDimensionalArr [ytre] [indre] = sc.nextInt (); }}}

Her, multiDimensionalArr [ytre] .lengde er lengden på en matrise ved en indeks ytre i flerdimensjonalArr.

Det hjelper oss å sikre at vi bare leter etter elementer innenfor et gyldig område for hver undergruppe, og dermed unngå en ArrayIndexOutOfBoundException.

5. Utskriftselementer

Hva om vi vil skrive ut elementene i vårt flerdimensjonale utvalg?

En åpenbar måte ville være å bruke iterasjonslogikken vi allerede har dekket. Dette innebærer å itere gjennom hvert element i vårt flerdimensjonale array, som i seg selv er en array, og deretter itere over det underordnede arrayet - ett element om gangen.

Et annet alternativ vi har er å bruke java.util.Arrays.toString () hjelpermetode:

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

Og vi ender opp med å ha ren og enkel kode. Den genererte konsollutgangen ser ut som:

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

6. Lengden på elementene

Vi kan finne lengden på matriser i en flerdimensjonal matrise ved å itere over hovedmatrisen:

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

Vi kan også finne lengden på matriser ved hjelp av Java-strømmer:

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

7. Kopier en 2-D-serie

Vi kan kopiere et 2-D-array ved hjelp av Arrays.copyOf metode:

int [] [] copy2DArray (int [] [] arrayOfArrays) {int [] [] copied2DArray = new int [arrayOfArrays.length] []; for (int i = 0; i <arrayOfArrays.length; i ++) {int [] array = arrayOfArrays [i]; copied2DArray [i] = Arrays.copyOf (array, array.length); } retur kopiert2DArray; }

Vi kan også oppnå dette ved å bruke Java-strømmer:

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

8. Konklusjon

I denne artikkelen så vi på hva flerdimensjonale matriser er, hvordan de ser ut i minnet og måtene vi kan definere og bruke dem på.

Som alltid kan kildekoden til eksemplene som er presentert finnes på GitHub.


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