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
List
ArrayList
Lista
LinkedList
Linkelt lista
Vector
Vektor
Stack
Kazal
Set
HashSet
Készlet
TreeSet
LinkedHashSet
Queue
PriorityQueue
Sor
ArrayQueue
Map
HashMap
Térkép/szótár
TreeMap
HashTable

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 Collectioninterfé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 Collectionfelü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 Collectioninterfészt megvalósító osztályokat. A Listés Settípusok Queuemindegyike 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. HashSetgyűjtemény

Az HashSetosztá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 HashSetobjektumot egy utasítással, például:

HashSet<Type> name = new HashSet<Type>();

Hol Typetalálható a gyűjteményben tárolni kívánt elemek típusa HashSet.

Az HashSetosztálynak vannak ilyen metódusai:

Módszer Leírás
void add(Type value)
Hozzáadja az valueelemet a gyűjteményhez
boolean remove(Type value)
Eltávolítja az valueelemet a gyűjteményből.
Visszaadja true, ha volt ilyen elem
boolean contains(Type value)
Ellenőrzi, hogy a gyűjteménynek van-e valueeleme
void clear()
Törli a gyűjteményt, eltávolítja az összes elemet
int size()
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
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Hozzon létre egy HashSetobjektumot, 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 Setkollekció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: ListvsSet

Hasonlítsunk össze két típusú kollekciót: Listés SetMegné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 Setgyűjteményre. Legnépszerűbb megvalósítása az HashSetosztály.