"Itt vagyok."

– Szia, Ellie!

"Ma egy érdekes témáról fogunk beszélni. Az ArrayList osztályról fogok mesélni ."

"Új osztály? Klassz! Mit tud?"

"Hadd kezdjem a hátsó sztorival. Az egyetlen dolog, amit a programozók nem szeretnek a tömbökben, hogy nem lehet megváltoztatni a méretüket. Mi a teendő, ha három további elemet kell hozzáadnia egy olyan tömbhöz, amelynek csak egy szabad helye van? "

"Az egyetlen megoldás erre a problémára az, hogy nagyon nagy tömböket hozunk létre, hogy garantáltan elegendő hely legyen az összes elem számára. Ez azonban gyakran elvesztegetett memóriát jelent. Ha egy tömb általában három elemet tartalmaz, de erre a legkisebb esély is van hogy esetleg 100 elemet kell befogadnia, létre kell hoznia egy 100 elemű tömböt."

– Szóval mit találtak ki a programozók?

"Megírták az ArrayList osztályt, amely ugyanazt teszi, mint egy Array, de megváltoztathatja a méretét."

"Érdekes lépés. Hogyan csinálták?"

"Minden ArrayList objektum egy szabályos elemtömböt tárol. Amikor egy ArrayList elemet olvas be , akkor a belső tömbből olvassa be őket. Amikor az ArrayList listába írja , a belső tömbébe írja őket. Hasonlítsa össze ezeket az oszlopokat:"

Sor Tömb lista
Hozzon létre egy tárolót az elemek számára
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Szerezze meg az elemek számát
int n = list.length;
int n = list.size();
Szerezzen be egy elemet egy tömbből/gyűjteményből
String s = list[3];
String s = list.get(3);
Írjon egy elemet egy tömbbe
list[3] = s;
list.set(3, s);

"Szóval, miért jobb az ArrayList? Amennyire meg tudom állapítani, a kód most hosszabb."

"Először is, az ArrayList számos további műveletet támogat, amelyeket a programozóknak folyamatosan végre kell hajtaniuk. Egy átlagos tömb nem támogatja ezeket a műveleteket. Például elemek beszúrása vagy törlése egy tömb közepéről anélkül, hogy lyukakat hagyna. "

"Másodszor lehetőség van a tömb méretének megváltoztatására. Ha még egy elemet kell hozzáadnia, de a belső tömbnek nincs szabad helye, a következő történik az ArrayListben :

a) Létrejön egy másik tömb, amely 50%-kal nagyobb, mint a jelenlegi belső tömb, plusz egy elem.

b) A régi tömb összes eleme átmásolódik az újba.

c) Az új tömb az ArrayList objektum belső tömbjeként kerül mentésre. A régi tömb szemétnek van nyilvánítva (egyszerűen leállítjuk a hivatkozás tárolását)."

Sor Tömb lista
Adjon hozzá egy elemet a tömb végéhez
Ez a művelet nem támogatott
list.add(s);
Adjon hozzá egy elemet a tömb közepéhez
Ez a művelet nem támogatott
list.add(15, s);
Adjon hozzá egy elemet a tömb elejéhez
Ez a művelet nem támogatott
list.add(0, s);
Töröljön egy elemet a tömbből
Egy elemet törölhetünk a -val list[3] = null. De ez "lyukat" hagyna a tömbben.
list.remove(3);

"Hogyan dolgozunk ezzel az ArrayListtel?"

"Valójában ugyanúgy, mint egy közönséges tömbnél. Nézze. Hasonlítsuk össze az ArrayListtel való munkát a tömbbel való munkával. Tegyük fel, hogy " 10 karakterláncot kell beolvasnunk, és fordított sorrendben kell megjelenítenünk a képernyőn ".

"Ezt nézd:

Egy tömbbel
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
Egy ArrayList-tel
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

// Display the contents of the collection
for (int i = 0; i < list.size(); i++)
{
  int j = list.size() - i - 1;
  System.out.println( list.get(j) );
}
}

Ugyanazt a színt használtam a hasonló műveletek kiemelésére minden oszlopban."

"Egyrészt minden más, másrészt még mindig ugyanaz."

"Helyes. Kivéve, hogy nem használunk szögletes zárójeleket, amikor egy ArrayListtel dolgozunk . Ehelyett a get , set és add metódusokat használjuk ."

"Igen, ennyit összeszedtem. Mégis, nagyon ugyanúgy néz ki."