Elem hozzáadása Java tömbhöz vs ArrayList

1. Áttekintés

Ebben az oktatóanyagban röviden áttekintjük a Java tömbök és a standard memória elosztásának hasonlóságait és eltéréseit Tömb lista. Ezenkívül megtudjuk, hogyan csatolhatunk és illeszthetünk be elemeket egy tömbbe és Tömb lista.

2. Java tömbök és ArrayList

A Java tömb a nyelv által biztosított alapvető adatstruktúra. Ellentétben, Tömb lista megvalósítása a Lista tömb által támogatott felület, amelyet a Java Collections Framework biztosít.

2.1. Elemek elérése és módosítása

A tömb elemeihez a szögletes zárójelben történő jelöléssel férhetünk hozzá és módosíthatjuk őket:

System.out.println (anArray [1]); anArray [1] = 4;

Másrészről, Tömb lista rendelkezik egy sor módszerrel az elemek eléréséhez és módosításához:

int n = anArrayList.get (1); anArrayList.set (1, 4);

2.2. Fix vs dinamikus méret

Egy tömb és a Tömb lista mindkettő hasonló módon osztja ki a halom memóriát, de az különbözik egy tömb fix méretű, míg egy Tömb lista dinamikusan növekszik.

Mivel a Java tömb fix méretű, meg kell adnunk a méretet, miközben példányosítjuk. A tömb méretét nem lehet megnövelni, miután azt példányosítottuk. Ehelyett létre kell hoznunk egy új tömböt a beállított méretben, és át kell másolnunk az előző tömb összes elemét.

Tömb lista egy átméretezhető tömb megvalósítása a Lista interfész - vagyis Tömb lista az elemek hozzáadásával dinamikusan növekszik. Amikor az aktuális elemek száma (beleértve az új elemet, amelyet hozzá kell adni a Tömb lista) nagyobb, mint az alapul szolgáló tömb maximális mérete, akkor a Tömb lista növeli az alapul szolgáló tömb méretét.

Az alapul szolgáló tömb növekedési stratégiája a Tömb lista. Mivel azonban az alapul szolgáló tömb mérete dinamikusan nem növelhető, új tömb jön létre, és a régi tömb elemeket átmásolja az új tömbbe.

Az összeadási műveletnek állandó amortizált időköltsége van. Más szóval hozzátéve n elemeket egy Tömb lista igényel Tovább) idő.

2.3. Elemtípusok

Egy tömb tartalmazhat primitív és nem primitív adattípusokat is, a tömb meghatározásától függően. Azonban, an Tömb lista csak nem primitív adattípusokat tartalmazhat.

Amikor primitív adattípusú elemeket illesztünk be egy Tömb lista, a Java fordító automatikusan átalakítja a primitív adattípust a megfelelő objektum burkoló osztályába.

Most nézzük meg, hogyan csatolhatunk és illeszthetünk be elemeket a Java tömbökbe és a Tömb lista.

3. Elem hozzáfűzése

Mint már láttuk, tömbök rögzített méretűek.

Tehát egy elem hozzáfűzéséhez először deklarálnunk kell egy új tömböt, amely nagyobb, mint a régi tömb, és át kell másolnunk az elemeket a régi tömbből az újonnan létrehozott tömbbe. Ezt követően hozzáfűzhetjük az új elemet ehhez az újonnan létrehozott tömbhöz.

Nézzük meg annak Java-ban történő megvalósítását, anélkül, hogy bármilyen segédosztályt használnánk:

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

Felváltva a Tömbök osztály közüzemi módszert biztosít másolata(), amely segít egy új, nagyobb méretű tömb létrehozásában és az összes elem másolásában a régi tömbből:

int [] destArray = Tömbök.copyOf (srcArray, srcArray.hossz + 1);

Miután létrehoztunk egy új tömböt, könnyen hozzáfűzhetjük az új elemet a tömbhöz:

destArray [destArray.length - 1] = elemToAdd;

Másrészről, elem hozzáfűzése a Tömb lista meglehetősen egyszerű:

anArrayList.add (newElement);

4. Elem beszúrása az indexbe

Egy elem beillesztése egy adott indexbe anélkül, hogy elveszítené a korábban hozzáadott elemeket, nem egyszerű feladat a tömbökben.

Először is, ha a tömb már tartalmazza a méretével megegyező számú elemet, akkor először létre kell hoznunk egy új, nagyobb méretű tömböt, és át kell másolnunk az elemeket az új tömbbe.

Ezenkívül a megadott index után érkező összes elemet egy pozícióval jobbra kell tolnunk:

public static int [] insertAnElementAtAGivenIndex (végső int [] srcArray, int index, int newElement) {int [] destArray = új int [srcArray.length + 1]; int j = 0; mert (int i = 0; i <destArray.length-1; i ++) {if (i == index) {destArray [i] = newElement; } else {destArray [i] = srcArray [j]; j ++; }} return destArray; }

Azonban a ArrayUtils osztály egyszerűbb megoldást kínál számunkra az elemek tömbbe illesztésére:

int [] destArray = ArrayUtils.insert (2, srcArray, 77);

Meg kell adnunk azt az indexet, ahová be akarjuk illeszteni az értéket, a forrás tömböt és a beillesztendő értéket.

A beillesztés () A method egy új tömböt ad vissza, amely nagyobb számú elemet tartalmaz, és az új elem a megadott indexen van, és az összes többi elem egy pozícióval jobbra tolódik.

Ne feledje, hogy a beillesztés () A metódus változó argumentum, így tetszőleges számú elemet beilleszthetünk egy tömbbe.

Használjuk három elem beszúrásához srcArray a második indextől kezdve:

int [] destArray = ArrayUtils.insert (2, srcArray, 77, 88, 99);

A fennmaradó elemek pedig három hellyel jobbra tolódnak el.

Továbbá ez triviálisan elérhető a Tömb lista:

anArrayList.add (index, newElement);

Tömb lista eltolja az elemeket és beszúrja az elemet a kívánt helyre.

5. Következtetés

Ebben a cikkben a Java tömböt és Tömb lista. Továbbá megvizsgáltuk a kettő közötti hasonlóságokat és különbségeket. Végül láttuk, hogyan lehet elemeket csatolni és beilleszteni egy tömbbe és Tömb lista.

Mint mindig, a működő példák teljes forráskódja elérhető a GitHubon.