Bevezetés

Szinte minden programnak tárolnia kell bizonyos adatkészleteket. Lehetnek karakterláncok és számok, objektumok stb. A tömbök kiváló tárolási megoldást jelentenek. De a tömböknek vannak bizonyos korlátai. Például a méretük rögzített, az elemeket nem lehet eltávolítani, és nem lehet elemeket beilleszteni középre. A gyűjtemények azért jöttek létre, hogy megkerüljék ezeket és más korlátozásokat. Minden típusú gyűjtemény (és sok van belőlük, ahogy ezt a leckében később látni fogjuk) képes dinamikusan átméretezni magát. Egyes gyűjteménytípusok tárolhatják a rendezett elemeket, és automatikusan sorba állíthatják az új elemeket, amint hozzáadódnak.

Ebben a leckében megismerkedünk a Java Collections Framework alapgyűjteményeinek osztályhierarchiájával . Különféle alternatív könyvtárak is léteznek, amelyek kiterjesztik a szabványos Java Collections Framework képességeit . Ezek közül a legnépszerűbb a Guava (Google Collections Library).

*Nem minden interfész és osztály szerepel a diagramon. Néhányat kihagytunk, hogy könnyebben érthető legyen.

Alap interfészek

A diagram azt mutatja, hogy két alapvető interfész létezik, amelyek a többi osztály és interfész kialakítására vannak megvalósítva.

Nézzük meg ezeket a felületeket:

  1. Gyűjtemény — Egy közönséges gyűjtemény, amely elemek (objektumok) halmazát tartalmazza. Ez a gyűjtemény alapvető módszereket tartalmaz az elemekkel való munkavégzéshez: beszúrás ( add , addAll ), eltávolítás ( eltávolítás , eltávolítás , törlés ), keresés ( tartalmazza , tartalmazza az összeset ), ellenőrizze, hogy üres-e a gyűjtemény ( isEmpty ), és méret lekérése ( méret ).

  2. Térkép – Kulcs-érték párokként felépített gyűjtemény. Ráadásul a térképen minden kulcs egyedi : nincs két kulcsnak azonos értéke. Ezt a gyűjteményt néha szótárnak is nevezik. A térkép egy külön felület. Nem valósítja meg a Collection felületet, de a Java Collections Framework része.

Hasznos módszerek a térkép elemeivel való munkavégzéshez :

  • beszúrás ( put , put All )

  • get ( get , keySet , value , entrySet )

  • eltávolítani ( eltávolítani , törölni )

  • keresés ( includeKey , includeValue )

  • ellenőrizze, hogy a gyűjtemény üres-e ( isEmpty )

  • méret megszerzése ( méret )

Most beszéljünk részletesebben mindegyikről.

Gyűjtemény felület

A Gyűjtemény felület kiterjeszti az Iterable felületet, amelynek egyetlen metódusa van: iterator() . Számunkra ez azt jelenti, hogy minden gyűjtemény, amely az Iterable-t örökli , visszaadhat egy iterátort.

Az iterátor egy speciális objektum, amellyel bármely gyűjtemény elemeit elérheti, függetlenül annak konkrét megvalósításától.

Az ábrán látható, hogy 3 interfész örökli a Gyűjtemény felületet: Lista , Várólista és Beállítás . Most mindegyiket röviden megvizsgáljuk.

A lista egy rendezett gyűjtemény, amely lehetővé teszi az értékek megkettőzését. A Lista sajátossága, hogy elemei számozottak, és számmal (indexszel) érhetők el.

A Queue az elemeket abban a sorrendben tárolja, ahogyan hozzáadták őket a sorhoz.

A listákkal ellentétben a halmaz egy rendezetlen gyűjteményt jelent, amely nem engedélyezi az ismétlődő elemeket. A Set interfész a matematikai halmaz fogalmának felel meg .

A Map interfész megvalósításai

Láthatjuk, hogy a Map interfész az egyedi kulcsok és értékek közötti leképezést képviseli.


interface Map<K, V>

ahol K a kulcsok típusa, V pedig a tárolt értékek típusa.

Kulcs segítségével adatokat nyerhetünk ki egy térképről . Egy elem térképhez való hozzáadásához meg kell adnunk egy kulcsot és egy értéket.

Nézzük meg a Map néhány megvalósítását :

  1. A HashMap a Map olyan implementációja, amely hash táblákon alapul. Bármilyen típusú kulcsot és értéket tárolhat, beleértve a nullát is . Az elemek sorrendje nem garantált.

  2. A LinkedHashMap egy olyan adatstruktúra, amely elemek összekapcsolt listájaként tárolja az adatokat. Az elemek a hozzáadás sorrendjében jelennek meg a listában.

  3. A TreeMap a SortedMap felületet valósítja meg (a NavigableMap felületen keresztül). A struktúra elemei rendezett sorrendben tárolódnak (új elem hozzáadásakor a gyűjtemény automatikusan rendeződik). A TreeMap kiválóan alkalmas nagy mennyiségű rendezett adat tárolására, gyors visszakereséssel.

Elavult gyűjtemények:

A Java a korábbi verziókból elavult gyűjteményekkel rendelkezik (a visszamenőleges kompatibilitás fenntartása érdekében). Ezeket a régi gyűjteményeket nem szabad használni az új kódban:

  • Felsorolás – az Iterator interfészével analóg;

  • Vector — az elemek rendezett listája, és hasonló az ArrayList osztályhoz;

  • Verem – a verem-adatstruktúra megvalósítása, amely olyan elemeket tárol és manipulál, mint például az, hogy hogyan kommunikálna egy köteg könyvvel. Vannak módszerek az elemek verembe való hozzáadására ( push ) és eltávolítására ( pop );

  • Szótár – a Map interfészhez hasonló, de ez egy absztrakt osztály;

  • Hashtable – a HashMap analógja.

A gyűjtemények keretrendszeréről ebben a cikkben olvashat bővebben .