"Bună, Amigo!"

— Bună, Ellie!

„Astăzi o să ne analizăm odată pentru totdeauna structura colecțiilor.”

„Am așteptat mult timp asta”.

„Știi deja ce sunt colecțiile și știi cum să lucrezi cu ele. Este timpul să-ți organizezi cunoștințele într-un sistem strict. Apoi multe întrebări „de ce” și „cum” vor dispărea și majoritatea lucrurilor vor deveni evidente.”

" Interfețe de colecție . Structura de moștenire a interfețelor de colecție arată cam așa:"

Interfețe de colecție - 1

Observați două lucruri.

În primul rând, tot ce vezi aici este o interfață.

În al doilea rând, săgețile înseamnă „moștenește”.

„Cu alte cuvinte, List, Set și Queue moștenesc colecția, dar Map nu?”

„Da. Clasele abstracte moștenesc apoi aceste interfețe și, la rândul lor, implementările despre care știți moștenesc acele clase abstracte:  ArrayList, Hashtable, TreeSet,…

"Ai dreptate."

„Acum să vedem pentru ce sunt metodele acestor interfețe:”

Metode ale interfeței Iterable<E> ::

Metode Descriere
Iterator<T> iterator(); Returnează un obiect iterator.

— Asta nu pare suficient.

"Ei bine, atât sunt. Asta-i tot pentru iteratori. Nu le vom acoperi acum, dar le vom acoperi în detaliu în curând."

Metode ale colecției<E>: interfață:

Metode Descriere
boolean add(E e); Adaugă un element la colecție
boolean addAll(Collection<? extends E> c); Adaugă elemente la colecție
void clear(); Elimină toate elementele din colecție
boolean contains(Object o); Verifică dacă colecția conține elementul.
boolean containsAll(Collection<?> c); Verifică dacă colecția conține elementele.
boolean equals(Object o); Verifică dacă colecțiile sunt echivalente
int hashCode(); Returnează codul hash
boolean isEmpty(); Verifică dacă colecția este goală.
Iterator<E> iterator(); Returnează un obiect iterator
boolean remove(Object o); Elimină un element din colecție
boolean removeAll(Collection<?> c); Elimină elemente din colecție
boolean retainAll(Collection<?> c); Îndepărtează toate elementele care nu sunt în c
int size(); Returnează dimensiunea colecției
Object[] toArray(); Convertește colecția într-o matrice
<T> T[] toArray(T[] a); Convertește colecția într-o matrice

"Sunt deja solid în tot ce este aici. Am folosit jumătate din aceste metode și am întâlnit cealaltă jumătate."

— Grozav, atunci hai să continuăm.

Metode ale  listei<E>: interfață:

Metode Descriere
void add(int index, E element); Adaugă elemente la mijlocul colecției
boolean addAll(int index, Collection<? extends E> c); Adaugă elemente la colecție
E get(int index); Returnează un element după index
int indexOf(Object o); Returnează indexul (numărul) unui element
int lastIndexOf(Object o); Returnează indexul ultimului element.
ListIterator<E> listIterator(); Returnează un iterator pentru listă
ListIterator<E> listIterator(int index); Returnează un iterator pentru listă
E remove(int index); Îndepărtează un element după indexul său
E set(int index, E element); Setează o nouă valoare după index
List<E> subList(int fromIndex, int toIndex); Returnează o subcolecție

"Nici aici nimic radical nou. Știu deja aproape totul despre colecții, de care nu mă pot abține să nu mă bucur."

"Ei bine, cred că pot găsi ceva care să vă surprindă. Dar să continuăm să examinăm interfețele:"

Metode ale interfeței Set<E> ::

Metode Descriere
Fara metode

„Interfața Set nu are metode noi – doar cele pe care le moștenește.”

„Da, am văzut că nici interfața Interable nu avea nimic.

„Pe de altă parte, mai puține metode înseamnă mai puțin de amintit!”

„Optimismul tău care afirmă viața mă face fericit”.

„Interfața Set este moștenită de două interfețe cu metode: SortedSet și NavigableSet. Dar nu voi trece peste ele, sau nu vom termina niciodată.”

„În schimb, permiteți-mi să vă ofer o imagine generală a claselor și interfețelor care descriu colecțiile în Java.”

"Aduceți-l."

„Atunci ține-te bine:”

Interfețe de colecție - 2

"Wow, asta e imens!"

"Ei bine, nu este atât de mare. De asemenea, amintiți-vă că clasele abstracte sunt în întregime opționale. Dar este bine să vă amintiți care clasă implementează ce interfețe. Acest lucru poate fi util destul de des."

„Oh, aș dori, de asemenea, să remarc că unele colecții sunt considerate învechite”.

— Care sunt acelea?

„Vorbesc despre clasele Vector, Stack, Dictionary și Hashtable. Acestea sunt versiuni sincronizate (securizate pentru fire) ale colecțiilor obișnuite.”

„Dar Java a adăugat o bibliotecă de concurență specială cu o mulțime de colecții care nu numai că pot fi accesate din alte fire de execuție, dar au și o implementare mult mai eficientă.  ConcurrentHashMap este mult mai eficient decât Hashtable .”

„Puteți folosi colecțiile Vector, Stack, Dictionary și Hashtable, dar nu este recomandat.”

— Am înțeles, voi ține cont de asta.

— Mulțumesc, Ellie!