1. Containere și colecții

Containerele sau colecțiile sunt clase care vă permit să stocați și să procesați mai multe obiecte simultan. Cunoașteți deja două tipuri de containere: matrice și liste.

Java are câteva zeci de colecții, fiecare stocând elemente în felul său specific. Iată câteva dintre ele:

Colectie Clasă Descriere
List
ArrayList
Listă
LinkedList
Lista legată
Vector
Vector
Stack
Grămadă
Set
HashSet
A stabilit
TreeSet
LinkedHashSet
Queue
PriorityQueue
Coadă
ArrayQueue
Map
HashMap
Hartă/Dicționar
TreeMap
HashTable

Numele sunt oarecum ambigue aici. În majoritatea limbajelor de programare, toate aceste structuri de date sunt numite colecții, dar nu în Java. În Java, unele dintre aceste clase implementează interfața Collection, în timp ce altele nu.

În consecință, colecțiile sunt împărțite în colecții în sens larg și colecții în sens restrâns (doar cele care implementează Collectioninterfața).

Deci, pentru a evita confuzia, atunci când vorbim de colecții ne referim în sensul restrâns al cuvântului, adică clase care implementează interfața Collection. Tipurile Listși tipurile sunt toate colecții Set. QueueColecțiile în sens larg sunt denumite în general containere . Acestea includ tipuri precum Mapși matrice.


2. HashSetcolectare

Clasa HashSeteste o colecție tipică de seturi. În multe privințe, este similar cu ArrayListclasa. În unele privințe, este o versiune mai primitivă.

Puteți crea un HashSetobiect folosind o instrucțiune ca:

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

Unde Typeeste tipul de elemente pe care le vom stoca în HashSetcolecție.

Clasa HashSetare metode ca aceasta:

Metodă Descriere
void add(Type value)
Adaugă valueelementul la colecție
boolean remove(Type value)
Elimină valueelementul din colecție.
Returnează truedacă a existat un astfel de element
boolean contains(Type value)
Verifică dacă colecția are un valueelement
void clear()
Șterge colecția, eliminând toate elementele
int size()
Returnează numărul de elemente din colecție

Iată un exemplu de utilizare a unui set.

Să scriem un program care își ia rămas bun de la utilizator dacă el sau ea salută. Pentru a-l face mai interesant, vom oferi programului nostru capacitatea de a înțelege „bună ziua” în mai multe limbi.

Cod Notă
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!");
Creați un HashSetobiect care stochează Stringelemente.


Adăugăm în setvariabilă salutări în diferite limbi.




Citiți un rând din consolă.


Dacă șirul este în setul nostru de salutări, atunci ne luăm la revedere.


3. Setați

Colecția Seteste concepută pentru a deține un set de elemente. De aceea se numește Set(set). Această colecție are trei caracteristici.

Operații pe platou

Există doar trei lucruri pe care le puteți face cu un set: adăugați elemente la set, eliminați elemente din set și verificați dacă setul conține un anumit element. Asta este.

Nicio comandă

Elementele din această colecție nu au indici. Nu puteți obține un element după un index sau nu puteți scrie o valoare într-o colecție la un anumit index. Un set are nu get()și set()metode.

Elemente unice

Toate elementele dintr-un set sunt unice. Spre deosebire de o listă, un set poate conține o singură instanță a unui element. Un obiect este fie în set, fie nu - nu există o a treia opțiune. Nu puteți adăuga negru de trei ori la un set de culori. Ori este acolo, ori nu este.

Găsirea elementelor

Când adăugați un element nou, eliminați un element sau verificați dacă un element există într-un set, se efectuează o căutare a elementului în metodă. Elementul trecut este comparat cu elementele colecției mai întâi prin hashCode(), iar apoi dacă valorile returnate de hashCode()se potrivesc, prin equals().



4. Compararea colecțiilor: ListvsSet

Să comparăm două tipuri de colecții: Listși SetNe vom uita la principalele diferențe, când una este mai avantajoasă decât cealaltă și invers.

Să încercăm să comparăm List și Set folosind jucării ca exemplu.

Colecția List(listă) este ca un set de jucării aranjate de-a lungul peretelui într-o cameră de joacă. Puteți adăuga o jucărie la sfârșitul listei. Dacă chiar aveți nevoie, îl puteți introduce și în mijloc (dar unele dintre jucăriile existente vor trebui mutate).

Fiecare jucărie are un index. Puteți face referire la o jucărie după index și, de asemenea, puteți înlocui jucăria numărul 7 cu jucăria numărul 13. Puteți elimina jucăria numărul 4 din listă. În cele din urmă, puteți afla indexul fiecărei jucării din listă.

Colecția Set(setul) seamănă mai mult cu o grămadă de jucării în mijlocul podelei. Puteți adăuga o jucărie la grămadă și puteți elimina o jucărie din grămadă. Dar aceste jucării nu au un index fix asociat cu ele.

Sau să presupunem că alegi o jucărie pentru ziua copilului tău. În primul rând, te gândești dacă are deja jucăria. Toate jucăriile pe care le are deja formează un set de jucării pe care nu vei alege să le cumperi.

Din acest punct de vedere, puteți observa că ordinea jucăriilor într-un set de „jucării care există deja” nu contează și nici dacă băiatul de naștere are două exemple ale unei anumite jucării. Nu vă interesează ordinea sau numărul fiecărei jucării. Ceea ce îți pasă este să cunoști fiecare jucărie unică care există în set.

Pentru astfel de cazuri, aveți nevoie de Setcolecție. Cea mai populară implementare a sa este HashSetclasa.