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.