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.