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).
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:
-
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 ).
-
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 :
-
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.
-
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.
-
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 .
GO TO FULL VERSION