1. Kétdimenziós tömbök
Még egy érdekesség a tömbökről. A tömbök nem csak egydimenziósak (lineárisak). Kétdimenziósak is lehetnek.
Mit jelent ez, kérdezed?
Ez azt jelenti, hogy a tömb cellái nem csak egy oszlopot (vagy sort), hanem egy téglalap alakú táblázatot is ábrázolhatnak.
int[][] name = new int[width][height];
Ahol a név a tömbváltozó neve, a szélesség a táblázat szélessége (cellákban), a magasság pedig a táblázat magassága. Példa:
|
Létrehozunk egy kétdimenziós tömböt: 2 oszlopból és 5 sorból. Írjon 5-öt az (1, 1) cellába. |
Így fog kinézni a memóriában:

Mellesleg gyors inicializálást is használhat kétdimenziós tömbökhöz:
// Lengths of months of the year in each quarter
int[][] months = { {31, 28, 31}, {30, 31, 30}, {31, 31, 30}, {31, 30, 31} };
Olyan sok hely van, ahol programozóként szüksége lehet egy kétdimenziós tömbre. A kétdimenziós tömbök szinte minden társasjáték alapját képezik, pl. sakk, dáma, tic-tac-toe és tengeri csata:

A kétdimenziós tömbök tökéletesek sakk- vagy tengeri csatákhoz. Csak a cellakoordinátákból álló számokra van szükségünk. Nem 'gyalog e2-e4', hanem 'gyalog (5,2) -> (5,4)'. Programozóként még könnyebb lesz.
2. Elemek elrendezése tömbökbe: (x, y) vagy (y, x)
Egyébként van itt egy érdekes dilemma:
Amikor tömböt hozunk létre a segítségével new int[2][5];
, akkor van egy táblánk "két sor és 5 oszlop ", vagy ez "két oszlop és 5 sor "?" Más szóval, először a szélességet, majd a magasságot adjuk meg... vagy fordítva, először a magasság, majd a szélesség?Nos, ahogy szoktuk mondani, itt nem minden olyan egyszerű.
Kezdjük azzal a kérdéssel, hogy a tömb hogyan tárolódik a memóriában .
Természetesen a számítógép memóriájában valójában nincs mátrix: a memória minden helyének szekvenciális numerikus címe van: 0, 1, 2, ... Esetünkben 2 × 5-ös mátrixról beszélünk, de a memóriában. ez csak 10 egymást követő cella, semmi több. Semmi sem jelzi, hol vannak a sorok és az oszlopok.
Érv a "szélesség x magasság" mellett.
E megközelítés mellett az az érv, hogy mindenki matematikát tanul az iskolában, ahol megtanulják, hogy a koordinátapárokat „x”-ként (vagyis a vízszintes tengelyen), majd „y”-ként (a függőleges dimenzió) írják fel. És ez nem csak egy iskolai szabvány – ez egy általánosan elfogadott szabvány a matematikában. Ahogy mondani szokás, a matekkal nem lehet vitatkozni. így van? Először szélesség, majd magasság?
Érv a "magasság x szélesség" mellett.
Egy érdekes érv is felhozható ehhez az állásponthoz: a kétdimenziós tömbök gyors inicializálása. Valóban, ha inicializálni akarjuk a tömbünket, akkor a következő kódot írhatjuk:
// Matrix of important data
int[][] matrix = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };
Nem veszel észre semmit? Mi van, ha nálunk ez van?
// Matrix of important data
int[][] matrix = {
{1, 2, 3, 4, 5},
{1, 2, 3, 4, 5}
};
Ha soronként beírjuk adatainkat a kódba, akkor egy 2 soros és 5 oszlopos mátrixot kapunk.
A lényeg
Mit mondhatunk? Ön dönti el, melyik a kényelmesebb az Ön számára. A legfontosabb dolog az, hogy minden programozó, aki ugyanazon a projekten dolgozik, ugyanazt a megközelítést alkalmazza.
Ha olyan projekten dolgozol, amelynek kódja sok inicializált kétdimenziós tömböt tartalmaz, akkor valószínűleg minden gyors adatinicializáláson fog alapulni, azaz a szabványos 'magasság x szélesség' lesz.
Ha olyan szerencsés, hogy olyan projektben találja magát, amely sok matematikát magában foglal, és koordinátákkal dolgozik (például játékmotorok), akkor a kód valószínűleg a „szélesség x magasság” megközelítést alkalmazza.
3. Hogyan vannak elrendezve a kétdimenziós tömbök
És most megtudhatja, hogyan vannak elrendezve a kétdimenziós tömbök. Kész?
A kétdimenziós tömbök valójában tömbök tömbjei!
Más szóval, ha egy közönséges tömb esetén egy tömbváltozó egy tömbelemeket tároló tárolóra való hivatkozást tárol, akkor a kétdimenziós tömbök esetében a helyzet egy kicsit robbanásszerű: egy kétdimenziós tömbváltozó tárol egy hivatkozás egy tárolóra, amely egydimenziós tömbök hivatkozásait tárolja. Jobb egyszer működés közben látni, mint százszor elmagyarázni:

A bal oldalon van egy kétdimenziós tömbváltozó, amely egy kétdimenziós tömb objektumra való hivatkozást tárol. Ban,-benközepén van egy kétdimenziós tömbobjektumunk, amelynek cellái egydimenziós tömböket tárolnak, amelyek egy kétdimenziós tömb sorai. A jobb oldalon pedig négy egydimenziós tömb látható – a mi kétdimenziós tömbünk sorai.
A kétdimenziós tömbök valójában így működnek. És ez a megközelítés számos előnnyel jár a Java programozónak:
Először is , mivel a „tárolók tárolója” hivatkozásokat tárol „sortömbökre”, nagyon gyorsan és egyszerűen cserélhetünk sorokat. A „tárolók tárolójának” megszerzéséhez csak egy indexet kell megadnia kettő helyett. Példa:
int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];
Ez a kód lehetővé teszi a sorok felcserélését:
|
A kétdimenziós tömb matrix[0] az első sor hivatkozását tárolja. Kicseréljük a referenciákat. Ennek eredményeként a matrix tömb így néz ki:
|
Ha egy kétdimenziós tömb cellájára hivatkozik, de csak egy indexet ad meg a tömb neve után, akkor olyan konténerekre gondol, amelyek cellái közönséges egydimenziós tömbökre utalnak.
GO TO FULL VERSION