Tömb hosszának meghosszabbítása

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk a Java tömb bővítésének különböző módjait.

Mivel a tömbök a memória egybefüggő blokkjai, a válasz nem feltétlenül nyilvánvaló, de most csomagoljuk ki.

2. Használata Tömbök.copyOf

Először nézzük meg Tömbök.copyOf. Másoljuk a tömböt, és hozzáadunk egy új elemet a másolathoz:

public Integer [] addElementUsingArraysCopyOf (Integer [] srcArray, int elementToAdd) {Integer [] destArray = Arrays.copyOf (srcArray, srcArray.length + 1); destArray [destArray.length - 1] = elemToAdd; return destArray; }

Az út Tömbök.copyOf működik, hogy ehhez a srcArray és egy új tömbbe másolja a length argumentumban megadott elemek számát amelyet belsőleg teremt. Az új tömb mérete az az érv, amelyet megadunk.

Egy dolgot kell észrevenni, hogy amikor a length argumentum nagyobb, mint a forrás tömb mérete, Tömbök.copyOf kitölti a rendeltetési tömbben lévő extra elemeket nulla.

Az adattípustól függően a kitöltés viselkedése eltérő lesz. Például, ha primitív adattípusokat használunk a Egész szám akkor az extra elemeket a nullák töltik ki. Abban az esetben char, Tömbök.copyOf extra elemeket fog kitölteni nulla és abban az esetben logikai érték, val vel hamis.

3. Használata Tömb lista

A következő módszer, amelyet megvizsgálunk, a használat Tömb lista.

Először mi konvertálja a tömböt Tömb listamajd adja hozzá az elemet. Akkor majd konvertálja a Tömb lista vissza egy tömbhöz:

public Integer [] addElementUsingArrayList (Integer [] srcArray, int elementToAdd) {Integer [] destArray = új egész szám [srcArray.length + 1]; ArrayList arrayList = new ArrayList (Arrays.asList (srcArray)); arrayList.add (elementToAdd); return arrayList.toArray (destArray); }

Ne feledje, hogy túlléptük a srcArray átalakításával a Gyűjtemény. A srcArray akarat töltse fel az alapul szolgáló tömböt a Tömb lista.

Megjegyzendő egy másik dolog, hogy a cél tömböt argumentumként adtuk át array. Ez a módszer megteszi másolja az alapul szolgáló tömböt a destArray.

4. Használata Rendszer.arraycopy

Végül megnézzük Rendszer.arraycopy, ami egészen hasonló a Tömbök.copyOf:

public Integer [] addElementUsingSystemArrayCopy (Integer [] srcArray, int elementToAdd) {Integer [] destArray = új egész szám [srcArray.length + 1]; System.arraycopy (srcArray, 0, destArray, 0, srcArray.length); destArray [destArray.length - 1] = elemToAdd; return destArray; }

Egy érdekes tény az Tömbök.copyOf belsőleg használja ezt a módszert.

Itt észrevehetjük, hogy mi másolja az elemeket a srcArray nak nek destArray és akkor adja hozzá az új elemet hoz destArray.

5. Teljesítmény

A megoldásokban egy dolog közös, hogy így vagy úgy új tömböt kell létrehoznunk. Ennek oka az, hogy a tömbök hogyan vannak elosztva a memóriában. Egy tömb a összefüggő memóriablokk szupergyors kereséshez, ezért nem tudjuk egyszerűen átméretezni.

Ennek természetesen van hatása a teljesítményre, különösen a nagy tömbök esetében. Ez az oka Tömb lista túlzott allokáció, hatékonyan csökkentve a JVM-nek a memória átcsoportosításának szükségességét.

De, ha sok beszúrást végzünk, akkor egy tömb nem biztos, hogy megfelelő adatstruktúra, és figyelembe kell vennünk a LinkedList.

6. Következtetés

Ebben a cikkben megvizsgáltuk az elemek hozzáadásának különböző módjait egy tömb végéhez.

És mint mindig, a teljes kód elérhető a GitHubon.


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