1. Konténerek és gyűjtemények
A tárolók vagy gyűjtemények olyan osztályok, amelyek lehetővé teszik több objektum egyidejű tárolását és feldolgozását. Kétféle tárolót ismer már: tömböket és listákat.
A Java több tucat gyűjteményt tartalmaz, amelyek mindegyike a maga sajátos módján tárolja az elemeket. Íme néhány közülük:
Gyűjtemény | Osztály | Leírás |
---|---|---|
|
|
Lista |
|
Linkelt lista | |
|
Vektor | |
|
Kazal | |
|
|
Készlet |
|
||
|
||
|
|
Sor |
|
||
|
|
Térkép/szótár |
|
||
|
A nevek itt kissé félreérthetőek. A legtöbb programozási nyelvben ezeket az adatstruktúrákat gyűjteménynek nevezik, a Java-ban azonban nem. A Java-ban ezen osztályok egy része megvalósítja az Collection
interfészt, míg mások nem.
Ennek megfelelően a gyűjtemények a tágabb értelemben vett gyűjteményekre és a szűk értelemben vett gyűjteményekre oszlanak (csak azokra, amelyek megvalósítják a Collection
felületet).
Tehát a félreértések elkerülése végett, amikor gyűjteményekről beszélünk, a szó szűk értelmében értjük, vagyis az Collection
interfészt megvalósító osztályokat. A List
és Set
típusok Queue
mindegyike gyűjtemény. A tágabb értelemben vett gyűjteményeket általában konténereknek nevezik . Ide tartoznak a hasonló típusok Map
és a tömbök.
2. HashSet
gyűjtemény
Az HashSet
osztály egy tipikus készletgyűjtemény. Sok szempontból hasonlít az osztályhoz ArrayList
. Bizonyos szempontból ez egy primitívebb változat.
Létrehozhat HashSet
objektumot egy utasítással, például:
HashSet<Type> name = new HashSet<Type>();
Hol Type
található a gyűjteményben tárolni kívánt elemek típusa HashSet
.
Az HashSet
osztálynak vannak ilyen metódusai:
Módszer | Leírás |
---|---|
|
Hozzáadja az value elemet a gyűjteményhez |
|
Eltávolítja az value elemet a gyűjteményből. Visszaadja true , ha volt ilyen elem |
|
Ellenőrzi, hogy a gyűjteménynek van-e value eleme |
|
Törli a gyűjteményt, eltávolítja az összes elemet |
|
A gyűjtemény elemeinek számát adja vissza |
Íme egy példa egy készlet használatára.
Írjunk egy programot, amely elköszön a felhasználótól, ha köszön. Hogy még érdekesebb legyen, programunknak lehetőséget adunk arra, hogy több nyelven is megértse a „hello” szót.
Kód | jegyzet |
---|---|
|
Hozzon létre egy HashSet objektumot, amely elemeket tárol String . A változóhoz különféle nyelvű üdvözletet adunk set . Olvasson egy sort a konzolról. Ha a zsinór benne van az üdvözlőkészletünkben, akkor elköszönünk. |
3. Állítsa be
A Set
kollekciót úgy tervezték, hogy egy sor elemet tartalmazzon. Ezért hívják Set
(halmaznak). Ennek a gyűjteménynek három jellemzője van.
Műveletek egy készleten
Egy halmazsal csak három dolgot tehet: elemeket adhat hozzá a halmazhoz, elemeket távolíthat el a halmazból, és ellenőrizze, hogy a halmaz tartalmaz-e egy adott elemet. Ez az.
Nincs rendelés
A gyűjtemény elemei nem rendelkeznek indexekkel. Nem kaphat meg egy elemet index alapján, és nem írhat értéket egy adott indexen lévő gyűjteménybe. Egy halmaznak nincsenek get()
és set()
metódusai.
Egyedi elemek
A készlet minden eleme egyedi. A listától eltérően egy halmaz egy elemnek csak egy példányát tartalmazhatja. Egy objektum vagy benne van a készletben, vagy nincs – nincs harmadik lehetőség. A feketét nem lehet háromszor hozzáadni egy színkészlethez. Vagy van, vagy nincs.
Elemek keresése
Amikor új elemet ad hozzá, eltávolít egy elemet, vagy ellenőrzi, hogy létezik-e elem egy halmazban, a metódusban az elem keresése történik. Az átadott elemet először összehasonlítja a gyűjtemény elemeivel hashCode()
, majd ha a visszaadott értékek egyeznek hashCode()
, akkor a equals()
.
4. Gyűjtemények összehasonlítása: List
vsSet
Hasonlítsunk össze két típusú kollekciót: List
és Set
Megnézzük a főbb különbségeket, amikor az egyik előnyösebb, mint a másik, és fordítva.
Próbáljuk meg összehasonlítani a Listát és a Beállítást játékokkal példaként.
A List
(lista)gyűjtemény olyan, mint egy játékszoba fala mentén elhelyezett játékkészlet. A lista végére felvehet egy játékot. Ha nagyon kell, behelyezheti a közepébe is (de néhány meglévő játékot át kell helyezni).
Minden játéknak van indexe. A játékra utalhat az indexe alapján, és a 7-es számú játékot is helyettesítheti a 13-as játékkal. A 4-es számú játékot eltávolíthatja a listáról. Végül megtanulhatja a listában szereplő egyes játékok indexét.
A Set
(szett)kollekció inkább játékkupac a padló közepén. Hozzáadhat egy játékot a kupachoz, és kivehet egy játékot a kupacból. De ezekhez a játékokhoz nincs fix index társítva.
Vagy tegyük fel, hogy játékot választasz gyermeked születésnapjára. Először is gondold át, hogy nála van-e már a játék. Az összes játék, amivel már rendelkezik, olyan játékkészletet alkot, amelyet nem fog választani.
Ebből a szempontból láthatja, hogy a "már létező játékok" készletében a játékok sorrendje nem számít, és az sem, hogy a szülinaposnak két példánya van egy adott játékból. Nem érdekli az egyes játékok sorrendje vagy száma. Amit érdekel, az az, hogy ismerje a készletben található minden egyedi játékot.
Az ilyen esetekhez szüksége van a Set
gyűjteményre. Legnépszerűbb megvalósítása az HashSet
osztály.