Az ArrayList kapacitása és a Java tömbjének mérete

1. Áttekintés

A Java lehetővé teszi számunkra, hogy rögzített méretű tömböket hozzunk létre, vagy gyűjtőosztályokat használjunk hasonló feladat elvégzéséhez.

Ebben az oktatóanyagban megvizsgáljuk az an kapacitása közötti különbséget Tömb lista és egy tömb méretű.

Megvizsgálunk példákat arra is, hogy mikor kell inicializálnunk Tömb lista kapacitással, valamint a memóriahasználat szempontjából előnyökkel és hátrányokkal.

2. Példa

A különbségek megértése érdekében először próbáljuk ki mindkét lehetőséget.

2.1. Egy tömb mérete

A java-ban kötelező megadni a tömb méretét, miközben új példányt hoz létre:

Egész szám [] tömb = új egész szám [100]; System.out.println ("Egy tömb mérete:" + tömb.hossz);

Itt létrehoztunk egy énnteger 100-as tömb, amely az alábbi kimenetet eredményezte

Egy tömb mérete: 100

2.2. Kapacitása Tömb lista

Most hozzunk létre egy Tömb lista 100 kezdeti kapacitással:

Lista lista = new ArrayList (100); System.out.println ("A lista mérete:" + list.size ());
A lista mérete: 0

Mivel még nem adtak hozzá elemeket, a méret nulla.

Most adjunk hozzá egy elemet a listához, és ellenőrizzük annak méretét:

list.add (10); System.out.println ("A lista mérete:" + list.size ());
A lista mérete: 1

3. Méret tömbökben vs. Tömb lista

Az alábbiakban bemutatunk néhány fő különbséget egy tömb mérete és az an kapacitása között Tömb lista.

3.1. Méret módosítása

A tömbök rögzített méretűek. Miután egyesekkel inicializáljuk a tömböt int értéke, nem változhat. A méret és a kapacitás is megegyezik egymással.

Tömb listaMérete és kapacitása nincs rögzítve. A lista logikai mérete az elemek beillesztése és eltávolítása alapján változik. Ezt külön kezeljük a fizikai tároló méretétől. Akkor is, amikor a küszöbérték Tömb lista eléri a kapacitást, növeli annak képességét, hogy több elem számára helyet biztosítson.

3.2. Memória allokáció

A tömb memóriát a létrehozás során osztják ki. Amikor egy tömböt inicializálunk, a tömb méretének és típusának megfelelően osztja fel a memóriát. Az összes elemet inicializálja a-val nulla A referencia típusok értéke és a primitív típusok alapértelmezett értéke.

Tömb lista növekszik a memóriafoglalás. Amikor megadjuk a kapacitást a Tömb lista, elegendő memóriát oszt le az objektumok ezen kapacitásig történő tárolásához. A logikai méret továbbra is 0. Ha eljön az ideje a kapacitás bővítésének, akkor egy új, nagyobb tömb jön létre, és az értékek átmásolásra kerülnek.

Meg kell jegyeznünk, hogy van egy speciális szingulett 0 méretű tömb üres Tömb lista tárgyakat, így nagyon olcsó az elkészítésük. Érdemes ezt is megjegyezni Tömb lista belsőleg használja az Object referenciák tömbjét.

4. Mikor kell inicializálni Tömb lista kapacitással

Számíthatunk arra, hogy inicializáljuk az Tömb lista amikor a létrehozása előtt tudjuk a szükséges méretet, de általában nem szükséges. Van azonban néhány oka annak, hogy ez lehet a legjobb megoldás.

4.1. Építése egy nagy Tömb lista

Akkor jó inicializálni egy listát egy kezdeti kapacitással, ha tudjuk, hogy nagy lesz. Ez megakadályozza néhány költséges növekedési műveletet, amikor elemeket adunk hozzá.

Hasonlóképpen, ha a lista nagyon nagy, az automatikus növekedési műveletek több memóriát foglalhatnak le, mint amennyi a pontos maximális mérethez szükséges. Ennek oka, hogy a minden alkalommal növekvő összeget az eddigi méret arányában számítják ki. Tehát nagy listák esetén ez memóriapazarlást eredményezhet.

4.2. Kis többszörös építése Tömb listas

Ha sok kicsi gyűjteményünk van, akkor az automatikus kapacitása Tömb lista az elpazarolt memória nagy százalékát biztosíthatja. Mondjuk ezt Tömb lista a 10-es méretet részesíti előnyben, kisebb elemszámmal, de csak 2-t vagy 3-at tárolunk. Ez 70% elvesztegetett memóriát jelent, ami számíthat, ha rengeteg ilyen listánk van.

A kapacitás előre történő beállítása elkerülheti ezt a helyzetet.

5. A hulladék elkerülése

Meg kell jegyeznünk Tömb lista jó megoldás egy rugalmas méretű objektumtartályhoz, amely támogatja a véletlenszerű hozzáférést. Valamivel több memóriát fogyaszt, mint egy tömb, de gazdagabb műveletsort kínál.

Bizonyos használati esetekben, különösen a primitív értékek nagy gyűjteményei körül, a standard tömb gyorsabb lehet, és kevesebb memóriát használ fel.

Hasonlóképpen, változó számú elem tárolásához, amelyeket nem kell indexenként elérni, LinkedList teljesítőbb lehet. Nem jár semmiféle memóriakezeléssel.

6. Összefoglalás

Ebben a rövid cikkben láttuk a különbséget a Tömb lista és egy tömb méretét. Megnéztük azt is, hogy mikor kell inicializálnunk a Tömb lista kapacitással és annak előnyeivel a memóriahasználat és a teljesítmény tekintetében.

Mint mindig, a példa kód elérhető a GitHubon.