Introducere

Aproape fiecare program trebuie să stocheze un set de date. Poate fi șiruri și numere, obiecte și așa mai departe. Array-urile sunt o soluție excelentă de stocare. Dar matricele au anumite limitări. De exemplu, dimensiunea lor este fixă, elementele nu pot fi îndepărtate și nu puteți introduce elemente în mijloc. Colecțiile au fost create pentru a ocoli aceste și alte limitări. Toate tipurile de colecții (și există multe dintre ele, așa cum vom vedea mai târziu în această lecție) au capacitatea de a se redimensiona dinamic. Unele tipuri de colecție pot stoca elemente comandate și pot pune automat elemente noi în ordine pe măsură ce sunt adăugate.

În această lecție, ne vom familiariza cu ierarhia de clasă a colecțiilor de bază din cadrul Java Collections Framework . Există, de asemenea, diverse biblioteci alternative care extind capacitățile standardului Java Collections Framework . Cel mai popular dintre acestea este Guava (Biblioteca Google Collections).

*Nu toate interfețele și clasele sunt reprezentate în diagramă. Unele au fost omise pentru a fi mai ușor de înțeles.

Interfețe de bază

Diagrama arată că există două interfețe de bază care sunt implementate pentru a forma restul claselor și interfețelor.

Să aruncăm o privire la aceste interfețe:

  1. Colecție — O colecție obișnuită care conține un set de elemente (obiecte). Această colecție are metode de bază pentru lucrul cu elemente: insert ( add , addAll ), remove ( remove , removeAll , clear ), search ( contains , containsAll ), verificați dacă colecția este goală ( isEmpty ) și obțineți dimensiunea ( size ).

  2. Hartă — O colecție structurată ca perechi cheie-valoare. Mai mult, fiecare cheie dintr-o Hartă este unică: nu există două chei care au valori identice. Această colecție este uneori numită dicționar . Harta este o interfață separată. Nu implementează interfața Collection , dar face parte din Java Collections Framework .

Metode utile de lucru cu elemente dintr-o hartă :

  • inserați ( puneți , puneți tot )

  • get ( get , keySet , values , entrySet )

  • elimina ( elimină , șterge )

  • căutare ( conține cheia , conțineValoare )

  • verificați dacă colecția este goală ( isEmpty )

  • obține mărimea ( mărimea )

Acum să vorbim mai multe despre fiecare dintre ele.

Interfață de colecție

Interfața Collection extinde interfața Iterable , care are o singură metodă: iterator() . Pentru noi, aceasta înseamnă că orice colecție care moștenește Iterable va putea returna un iterator.

Un iterator este un obiect special pe care îl puteți folosi pentru a accesa elementele oricărei colecții, indiferent de implementarea sa specifică.

Figura arată că 3 interfețe moștenesc interfața de colecție : Listă , Coadă de așteptare și Set . Acum ne vom uita la fiecare dintre ele pe scurt.

Listă este o colecție ordonată care permite valori duplicate. O caracteristică particulară a unei Liste este că elementele sale sunt numerotate și pot fi accesate după număr (index).

O coadă stochează elementele în ordinea în care au fost adăugate la coadă.

Spre deosebire de o listă, un set reprezintă o colecție neordonată care nu permite elemente repetate. Interfața Set corespunde conceptului de mulțime matematică .

Implementări ale interfeței Map

Putem vedea că interfața Hartă reprezintă o mapare între chei și valori unice.


interface Map<K, V>

unde K este tipul cheilor și V este tipul valorilor stocate.

Folosind o cheie, putem extrage date dintr-o hartă . Pentru a adăuga un element la o hartă , trebuie să specificăm o cheie și o valoare.

Să ne uităm la câteva implementări ale Mapului :

  1. HashMap este o implementare a Map care se bazează pe tabele hash. Poate stoca chei și valori de orice tip, inclusiv null . Ordinea elementelor nu este garantată.

  2. LinkedHashMap este o structură de date care stochează datele ca o listă legată de elemente. Elementele apar în listă în ordinea în care au fost adăugate.

  3. TreeMap implementează interfața SortedMap (prin interfața NavigableMap ). Elementele din această structură sunt stocate în ordine sortată (când este adăugat un element nou, colecția este sortată automat). TreeMap este excelent pentru stocarea unor cantități mari de date sortate cu recuperare rapidă.

Colecții învechite:

Java are colecții învechite din versiunile anterioare (pentru a menține compatibilitatea cu versiunea precedentă). Aceste colecții vechi nu ar trebui folosite în codul nou:

  • Enumerare — analog cu interfața Iterator ;

  • Vector — o listă ordonată de elemente și analogă cu clasa ArrayList ;

  • Stivă — o implementare a structurii de date a stivei, care stochează și manipulează elemente precum modul în care ați interacționa cu un teanc de cărți. Există metode pentru adăugarea elementelor în stivă ( push ) și scoaterea lor ( pop );

  • Dicționar — analog cu interfața Map , dar este o clasă abstractă;

  • Hashtable — analog cu HashMap .

Puteți citi mai multe despre Cadrul de colecții în acest articol .