1. Tömbök a memóriában

Az előző példákban az illusztrációk kissé pontatlanok voltak.

Tömbök létrehozásakor (mint a karakterláncok létrehozásakor) két külön memóriablokk van lefoglalva: az egyik magának a tömbnek (tárolónak) a tárolására, a másik pedig a címét tároló változónak . Az alábbi kép ezt a pontosítást mutatja:

Tömbök a memóriában

Az elemtömbhöz lefoglalt memória 10 intés a tömb címétint[] tároló változó zöld színnel jelenik meg.int

Összehasonlításképpen intaz értéket tároló közönséges változó 199kék színnel látható.

Ez egy kicsit a karakterláncok memóriában való tárolására emlékeztet, nem gondolod?

Így van, húrok. És csakúgy, mint amikor karakterláncokkal dolgozik, tömbváltozókat rendelhet egymáshoz:

Kód Magyarázat
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Hozzon létre egy elemtömböt 10 int.
Rendelje hozzá az értéket 4az indexű cellához 2.
Rendelje hozzá az értéket 9az indexű cellához 7.
A változóban bmentse el a változóban tárolt címet a.
Most amutasson bugyanarra a tömbobjektumra a memóriában.
A tömbobjektum indexű cellájába 9írja be a cellákban tárolt értékek összegét 2(amely az értéket tárolja 4) és 7(amely az értéket tárolja 9).

A tömbobjektum ott marad, ahol volt, és a aés bváltozók ugyanazt a címet (hivatkozást) tárolják ugyanahhoz az objektumhoz. Nézz a képre:

Tömbök a memóriában 2

2. További részletek a tömbökkel való munkavégzésről

Teljesen bármilyen típusú elemből álló tömböt hozhat létre. Ehhez egyszerűen írjon szögletes zárójelet a típusnév után. Általában a tömb létrehozása így néz ki:

type[] name = new type[number];

Ahol a típus a tömbben tárolandó elemek típusa. A név annak a változónak a neve, amelyet a tömbre fogunk használni, a szám pedig a tömb celláinak számát.

A fenti példa egy tömbváltozó és tömbobjektum létrehozásának kanonikus formája. A valóságban ez két különálló entitás.

Egy tömbváltozót külön is létrehozhat egy tömbobjektumtól:

type[] name;
name = new type[number];

És még egy pont, ami nem elhanyagolható:

Használhat változókat vagy akár teljes kifejezéseket indextömbként és a tömbelemek számaként .

Példák:

Kód Magyarázat
int n = 100;
int[] a = new int[n];
Hozzon létre egy nelemtömböt
int n = 100;
int[] a = new int[n * 2 + 3];
Hozzon létre egy tömböt 203elemekkel
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Fontos:
Egyébként ügyeljen arra, hogy ha egy tömbcellát olyan index használatával próbál elérni, amely nem létezik a tömbhöz (példánkban ez bármely olyan egész számot jelent, amely nem a tartományban van), akkor a program összeomlik 0..99egy ArrayIndexOfBoundException, ami azt jelenti, hogy az index kívül volt a tömb határain.

3. Tömb hossza

Ahogy az előző példában láthatta, létrehozhat egy tömbváltozót önmagában, majd később értéket (hivatkozást egy tömbobjektumra) rendelhet hozzá valahol a kódban. Még ezt is megteheti:

Kód Magyarázat
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Hozzon létre egy tömbváltozót, amelynek típusa int[]
Ha a aváltozó kisebb, mint 10,
akkor hozzon létre egy elemtömböt 10.
Ellenkező esetben
hozzon létre egy 20elemtömböt

És most mi mást lehet csinálni egy ilyen tömbbel? Honnan tudod, hogy hány elem van benne?

Ennek elősegítésére a tömbök egy speciális tulajdonsággal (változóval) rendelkeznek, melynek neve length. Egy tömb hosszát a következő kifejezéssel találhatja meg:

array.length;

Itt arrayvan a tömbváltozó neve és lengtha tömb tulajdonságának neve. A lengthtulajdonság értéke nem változtatható: lengthmaga a tulajdonság hozzárendelhető más változókhoz, de nem rendelhető hozzá semmi (ha ezt megpróbáljuk, a program egyszerűen nem fordít le).

Folytathatjuk az előző példát így:

Kód Magyarázat
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Hozzon létre egy tömbváltozót, amelynek típusa int[]
Ha a aváltozó kisebb, mint 10,
akkor hozzon létre egy elemtömböt 10.
Ellenkező esetben
hozzon létre egy elemtömböt 20Hurok
a tömb összes elemén: tól 0hosszigarray.length - 1

4. Tények összefoglalása a Java tömbjeiről

Foglaljuk össze, mit tudunk a tömbökről:

Tény 1. Egy tömb sok cellából áll.

2. tény. Egy adott cellát a szám (index) használatával ér el.

3. tény. Minden cella azonos típusú.

4. tény. Az összes cella kezdeti értéke 0 (ha a cellák számokat tárolnak), null(ha a cellák objektumhivatkozásokat tárolnak) vagy false(ha a cellák értékeket tárolnak boolean). Ebben a fejezetben többet megtudhat az alapértelmezett értékekről .

Az 5. tény String[] list csupán egy változó deklarációja. Ez nem hozza létre magát a tárolót (tömbobjektumot). A változó használatához először létre kell hozni egy tömböt (tárolót), és hozzá kell rendelni a változóhoz. Lásd az alábbi példát.

Tény 6. Amikor tömbobjektumot (tárolót) hozunk létre, meg kell adni, hogy mekkora, azaz hány cellát tartalmaz. Ez egy olyan utasítással történik, mint: new TypeName[n];

7. tény. Egy tömb hosszát a tulajdonság segítségével találhatjuk meg .length.

8. tény. Egy tömb létrehozása után nem módosíthatja az elemeinek típusát vagy a tárolt elemek számát.

Kód Magyarázat
String s;
String[] list;
saz null
listvannull
list = new String[10];
int n = list.length;
A listváltozó egy objektumra való hivatkozást tárol: egy elemekből álló string tömböt 10.
nvan10
list = new String[0];

Most listegy elemtömbre utal 0. A tömb létezik, de nem tud elemeket tárolni.

list = null;
System.out.println(list[1]);
Kivételt (programhiba) dobunk, azaz a program összeomlik. listhivatkozást tárolnull
list = new String[10];
System.out.println(list[10]);
Határokon kívüli tömb kivétel (programhiba) jön létre.
Ha egy elemeket/cellákat listtárol 10, akkor az érvényes indexek: 0 1 2 3 4 5 6 7 8 910elemek.