Útmutató a Java ArrayListhez

1. Áttekintés

Ebben a cikkben megnézzük Tömb lista osztály a Java Gyűjtemények keretrendszeréből. Megbeszéljük a tulajdonságait, a szokásos használati eseteket, valamint az előnyeit és hátrányait.

Tömb lista Java Core könyvtárakban található, így nincs szükség további könyvtárakra. Használatához egyszerűen adja hozzá a következő import kimutatást:

import java.util.ArrayList;

Lista rendezett értéksorozatot jelent, ahol valamilyen érték többször is előfordulhat.

Tömb lista az egyik Lista egy tömb tetején épített megvalósítások, amelyek dinamikusan növekedni és zsugorodni képesek az elemek hozzáadásakor / eltávolításakor. Az elemeket a nullától kezdve könnyen elérhetik indexeik. Ez a megvalósítás a következő tulajdonságokkal rendelkezik:

  • Véletlenszerű hozzáférés szükséges O (1) idő
  • Az elem hozzáadása amortizált állandó időt vesz igénybe O (1)
  • Beszúrás / törlés tart Tovább) idő
  • A keresés eltart Tovább) a nem rendezett tömb ideje és O (log n) válogatottnak

2. Hozzon létre egy Tömb lista

Tömb lista több kivitelezője van, és mindet bemutatjuk ebben a szakaszban.

Először vegye észre Tömb lista egy általános osztály, ezért bármilyen típusú típussal paraméterezheti, és a fordító biztosítani fogja, hogy például Egész szám értékek belsejében Húrok. Emellett nem kell elemeket önteni, amikor lekéred őket egy gyűjteményből.

Másodszor, jó gyakorlat az általános felület használata Lista változó típusként, mert elválasztja egy adott megvalósítástól.

2.1. Alapértelmezett No-Arg Constructor

Lista lista = new ArrayList (); assertTrue (list.isEmpty ());

Egyszerűen létrehozunk egy üreset Tömb lista példa.

2.2. Konstruktor, aki elfogadja a kezdeti kapacitást

Lista lista = new ArrayList (20);

Itt adhatja meg az alapul szolgáló tömb kezdeti hosszát. Ez segíthet elkerülni a felesleges átméretezést új elemek hozzáadása közben.

2.3. Konstruktor elfogadása Gyűjtemény

Gyűjtemény száma = IntStream.range (0, 10) .boxed (). Collect (toSet ()); Lista lista = new ArrayList (számok); assertEquals (10, list.size ()); assertTrue (számok.tartalmaz Mindet (lista));

Figyeljük meg, hogy a Gyűjtemény példányt használják az alapul szolgáló tömb feltöltésére.

3. Adja hozzá az elemeket a Tömb lista

Beilleszthet egy elemet a végébe vagy a meghatározott helyre:

Lista lista = new ArrayList (); list.add (1L); list.add (2L); list.add (1, 3L); assertThat (Tömbök.asList (1L, 3L, 2L), equalTo (lista));

Gyűjteményt vagy több elemet is beilleszthet egyszerre:

Lista lista = new ArrayList (Arrays.asList (1L, 2L, 3L)); LongStream.range (4, 10) .boxed () .collect (collectAndThen (toCollection (ArrayList :: new), ys -> list.addAll (0, ys))); assertThat (Tömbök.asList (4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), egyenlőTo (lista));

4. Iterate Over the Tömb lista

Kétféle iterátor érhető el: Iterátor és ListIterator.

Míg az előbbi lehetőséget ad arra, hogy a listát egy irányba haladjon, addig az utóbbi lehetővé teszi, hogy mindkét irányban haladjon.

Itt csak a ListIterator:

List list = new ArrayList (IntStream.range (0, 10) .boxed (). Collect (toCollection (ArrayList :: new))); ListIterator it = list.listIterator (list.size ()); Lista eredménye = new ArrayList (list.size ()); while (it.hasPrevious ()) {result.add (it.previous ()); } Gyűjtemények.reverse (lista); assertThat (eredmény, egyenlőTo (lista));

Az iterátorok segítségével elemeket is kereshet, hozzáadhat vagy eltávolíthat.

5. Keresse meg a Tömb lista

Bemutatjuk, hogyan működik a keresés egy gyűjtemény segítségével:

Lista lista = LongStream.range (0, 16) .boxed () .map (Long :: toHexString) .collect (toCollection (ArrayList :: new)); Lista stringsToSearch = új ArrayList (lista); stringsToSearch.addAll (lista);

5.1. Keresés nem rendezett listában

Annak érdekében, hogy megtaláljon egy elemet, amelyet használhat indexe() vagy lastIndexOf () mód. Mindkettő elfogad egy tárgyat és visszatér int érték:

assertEquals (10, stringsToSearch.indexOf ("a")); assertEquals (26, stringsToSearch.lastIndexOf ("a"));

Ha minden olyan elemet meg akar találni, amely kielégíti az állítmányt, akkor a Java 8 segítségével szűrheti a gyűjteményt Stream API (erről bővebben itt olvashat) Állítmány mint ez:

Set matchingStrings = új HashSet (Arrays.asList ("a", "c", "9")); Lista eredménye = stringsToSearch .stream () .filter (matchingStrings :: tartalmaz) .collect (toCollection (ArrayList :: new)); assertEquals (6, eredmény.méret ());

Lehetőség van a mert hurok vagy iterátor:

Iterátor it = stringekToSearch.iterator (); Set matchingStrings = új HashSet (Arrays.asList ("a", "c", "9")); Lista eredménye = new ArrayList (); while (it.hasNext ()) {String s = it.next (); if (matchingStrings.contain (s)) {eredmény.add (s); }}

5.2. Keresés rendezett listában

Ha rendezett tömböt használ, használhat bináris keresési algoritmust, amely gyorsabban működik, mint a lineáris keresés:

Lista másolat = new ArrayList (stringsToSearch); Gyűjtemények.rendezés (másolat); int index = Collections.binarySearch (copy, "f"); assertThat (index, nem (egyenlőTo (-1)));

Figyelje meg, hogy ha egy elem nem található, akkor -1 értéket ad vissza.

6. Távolítsa el az elemeket a Tömb lista

Egy elem eltávolításához meg kell találnia annak indexét, és csak azután végezze el az eltávolítást a via segítségével eltávolítás () módszer. A módszer túlterhelt változata, amely elfogad egy objektumot, megkeresi és eltávolítja az egyenlő elem első előfordulását:

List list = new ArrayList (IntStream.range (0, 10) .boxed (). Collect (toCollection (ArrayList :: new))); Gyűjtemények.fordítva (lista); list.remove (0); assertThat (lista.get (0), egyenlőTo (8)); list.remove (Integer.valueOf (0)); assertFalse (list.contains (0));

De legyen óvatos, ha olyan dobozos típusokkal dolgozik, mint pl Egész szám. Egy adott elem eltávolításához először be kell jelölnie int vagy más módon, egy elemet eltávolít az indexe.

Használhatja a fent említetteket is Stream API több elem eltávolításához, de itt nem mutatjuk meg. Erre a célra iterátort használunk:

Set matchingStrings = HashSet (Tömbök.asList ("a", "b", "c", "d", "e", "f")); Iterátor it = stringekToSearch.iterator (); while (it.hasNext ()) {if (matchingStrings.contains (it.next ())) {it.remove (); }}

7. Összegzés

Ebben a gyors cikkben megnéztük a Java-ban található ArrayList-et.

Megmutattuk, hogyan kell létrehozni egy Tömb lista például hogyan lehet elemeket hozzáadni, megkeresni vagy eltávolítani különböző megközelítések segítségével.

Szokás szerint az összes kódmintát megtalálhatja a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found