1. ArrayListosztály

Ma megvizsgáljuk az ArrayListosztályt. Ez az első a gyűjtemények néven ismert osztályok közül . A Java nyelven a gyűjtemények olyan széles és hasznos témát jelentenek, hogy egy egész CodeGym küldetést szentelnek nekik.

A gyűjtemények felépítésének és minden árnyalatának teljes megértéséhez először meg kell tanulnia az OOP-t, a felületeket, az öröklődést, a többszálú kezelés alapjait és még sok mást.

Tehát ma csak a gyűjtemény legegyszerűbb fajtájával fogunk megismerkedni. De elég mélyen ahhoz, hogy megértse, hogyan kell használni és hogyan működik. Most akkor ismerkedjen meg a ArrayListgyűjteményével .

A háttértörténet

Kezdeném egy kis háttérrel. A programozók nem igazán kedvelték a tömbök egy aspektusát: azt, hogy a méretük nem változtatható. Mi a teendő, ha további három elemet kell tárolnia egy tömbben, de csak egy üres cella van?

Az egyetlen megoldás a tömbök helykorlátaira az volt, hogy egy nagyon nagy tömböt hozzunk létre, hogy elférjen benne az összes tárolandó elem. De ez általában az emlékezet pazarlása volt. Ha egy tömb általában két vagy három elemet tartalmazott, de kicsi az esélye annak, hogy 100-at kell tárolni, akkor létre kellett hozni egy tömböt, amely 100 tárolására alkalmas.

Szóval mit találtak ki a programozók? Megírták az ArrayListosztályt, amely ugyanazt a munkát végezte, mint az Arrayosztály, de átméretezhető volt.

ArrayList osztály

Az ArrayListosztály neve két szóból áll: Array + List. Arrayegy tömb és Listegy lista.

Minden ArrayListobjektum egy szokásos elemtömböt tartalmaz. Amikor egy elemet olvas be ArrayList, az objektum lekéri azokat a belső tömbjéből. Amikor elemeket ír, azokat a belső tömbbe írja.

Az ArrayList osztályból hiányzik a tömbök összes hátránya. Tudja, hogyan kell:

  • Adott típusú elemek tárolása
  • A lista dinamikus átméretezése
  • Adjon hozzá elemeket a lista végéhez
  • Szúrjon be elemeket a lista elejére vagy közepére
  • Elemek eltávolítása a lista bárhonnan

További részletekért lásd alább:


2. ArrayListObjektum létrehozása

Objektum létrehozásához ArrayLista következő kódot kell írnia:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Hol ArrayListtalálható a gyűjtemény típusa/osztálya, TypeParametera gyűjteményben tárolt elemek típusa ArrayListés egy változó nameneve .ArrayList<TypeParameter>

A nameváltozónak általános típusa van. Két típusból áll: először a gyűjtemény típusát tüntetik fel, majd szögletes zárójelekkel jelzik a gyűjteményben tárolt elemek típusát.

Példák:

Kód Leírás
ArrayList<Integer> list = new ArrayList<Integer>();
Egész számok listája
ArrayList<String> list = new ArrayList<String>();
A húrok listája
ArrayList<Double> list = new ArrayList<Double>();
Valós számok listája

A tömbökkel ellentétben a gyűjtemények nem tárolhatnak primitív típusokat, csak hivatkozási típusokat . Tehát ha s gyűjteményre van szüksége int, használja Integerinkább a wrapper osztályt.


3. Műveletek egyArrayList

Kezdetben az újonnan létrehozott lista hossza nulla, mivel 0 elemet tartalmaz. Ha egy elemet ad hozzá a listához, annak hossza 1-gyel nő. Ha eltávolítja a hozzáadott elemet, a hossza nullára csökken.

Az alábbi táblázat többet megtudhat az osztály metódusairól ArrayList:

Mód Leírás
void add(Type value)
Hozzáadja az átadott elemet a listához
void add(int index, Type value)
Hozzáad egy elemet a lista egy adott helyéhez.
Type get(int index)
Azt az elemet adja vissza, amelynek az indexeindex
void set(int index, Type value)
Hozzárendeli valueazt az elemet, amelynek indexeindex
Type remove(int index)
Eltávolítja azt az elemet, amelynek indexe index. Visszaadja az eltávolított elemet.
Type remove(Type value)
Eltávolítja a metódusnak átadott elemet. Ha egynél több ilyen elem van, akkor az első eltávolításra kerül.
void clear()
Törli a listát, azaz eltávolítja az összes elemet a listából.
boolean contains(Type value)
Ellenőrzi, hogy a lista tartalmaz-e value.
boolean isEmpty()
Ellenőrzi, hogy a lista üres-e vagy sem. Más szóval, hogy a lista hossza nulla-e.
int size()
A lista méretét adja vissza, azaz a lista elemeinek számát.
Type[] toArray(Type[] array)
A lista elemeit tartalmazó tömböt ad vissza.
A tömböt át kell adni a metódusnak.

Ezekkel a módszerekkel szinte bármit megtehet a listával: elemeket cserélhet, elemeket adhat hozzá és elemeket távolíthat el. Egyetlen paranccsal törölheti a listát, vagy akár tömbbé alakíthatja.



4. Összehasonlítása ArrayListésArray

Nem hiszem, hogy elkerülhetjük az összehasonlítást ArrayListés a tömböt.

Csak 4 műveletet hajthat végre a tömbökkel:

  • Hozzon létre egy tömböt
  • Szerezzen be egy elemet index szerint
  • Állítson be egy elemet index szerint
  • Adja meg a tömb hosszát

Íme ezek a műveletek, ahogy egy tömbre és egy tömbre vonatkoznak ArrayList:

Sor Tömb lista
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Hasonlítsuk össze, hogyan ArrayListműködik egy tömb és hogyan működik. Például hajtsuk végre ezt a feladatot: "olvass be 10 karakterláncot a billentyűzetről és jelenítsd meg a képernyőn fordított sorrendben"

Array használata Az ArrayList használata
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

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

Az analógia egyértelmű. A tömböknél valahogy minden rövidebb és világosabb. De ez sem nehéz: egy elem beszerzéséhez a módszert ArrayListhasználjuk ; get()elemet, módszert megváltoztatni set(); hogy megkapjuk a lista hosszát, a size()módszert.

Tehát miért használják a programozók az ArrayListosztályt?

A lényeg természetesen az összes többi metódus, amellyel a közönséges tömbök nem rendelkeznek:

  • Adjon hozzá egy elemet a listához
  • Adjon hozzá egy elemet a lista közepéhez
  • Keressen egy elemet a listában
  • Elem eltávolítása a listából