– Szia Amigo!

– Szia, Ellie!

"Ma egyszer s mindenkorra a gyűjtemények szerkezetére hajtjuk a fejünket."

– Sokáig vártam erre.

"Már tudja, mi a gyűjtemény, és tudja, hogyan kell velük dolgozni. Itt az ideje, hogy tudását szigorú rendszerbe rendezze. Akkor sok "miért" és "hogyan" kérdés eltűnik, és a legtöbb dolog nyilvánvalóvá válik."

" Gyűjtemény interfészek . A gyűjtőfelületek öröklődési struktúrája valahogy így néz ki:"

Gyűjteményi felületek - 1

Két dolgot vegyél észre.

Először is, minden, amit itt lát, egy felület.

Másodszor, a nyilak azt jelentik, hogy „örököl”.

"Más szóval, a Lista, a Beállítás és a Várólista örökli a gyűjteményt, de a Térkép nem?"

"Igen. Az absztrakt osztályok öröklik ezeket az interfészeket, és az Ön által ismert implementációk öröklik ezeket az absztrakt osztályokat:  ArrayList, Hashtable, TreeSet,… "

"Igazad van."

"Most lássuk, mire valók ezek az interfészek metódusai:"

Az Iterable<E>: interfész módszerei :

Mód Leírás
Iterator<T> iterator(); Egy iterátor objektumot ad vissza.

– Ez nem tűnik elégnek.

"Nos, ennyi van. Ennyi az iterátoroknak. Most nem foglalkozunk velük, de hamarosan részletesen is kitérünk rájuk."

A gyűjtés módszerei <E>: interfész:

Mód Leírás
boolean add(E e); Hozzáad egy elemet a gyűjteményhez
boolean addAll(Collection<? extends E> c); Elemeket ad a gyűjteményhez
void clear(); Eltávolítja az összes elemet a gyűjteményből
boolean contains(Object o); Ellenőrzi, hogy a gyűjtemény tartalmazza-e az elemet.
boolean containsAll(Collection<?> c); Ellenőrzi, hogy a gyűjtemény tartalmazza-e az elemeket.
boolean equals(Object o); Ellenőrzi, hogy a gyűjtemények egyenértékűek-e
int hashCode(); Visszaadja a hash kódot
boolean isEmpty(); Ellenőrzi, hogy a gyűjtemény üres-e.
Iterator<E> iterator(); Egy iterátor objektumot ad vissza
boolean remove(Object o); Eltávolít egy elemet a gyűjteményből
boolean removeAll(Collection<?> c); Eltávolítja az elemeket a gyűjteményből
boolean retainAll(Collection<?> c); Eltávolítja az összes olyan elemet, amely nem a c
int size(); Visszaadja a gyűjtemény méretét
Object[] toArray(); A gyűjteményt tömbbé alakítja
<T> T[] toArray(T[] a); A gyűjteményt tömbbé alakítja

"Itt már mindenben szilárd vagyok. Ezeknek a módszereknek a felét alkalmaztam, a másik felével pedig találkoztam."

– Remek, akkor folytassuk.

 A Lista<E> módszerei : interfész:

Mód Leírás
void add(int index, E element); Elemeket ad a gyűjtemény közepéhez
boolean addAll(int index, Collection<? extends E> c); Elemeket ad a gyűjteményhez
E get(int index); Egy elemet index szerint ad vissza
int indexOf(Object o); Egy elem indexét (számát) adja vissza
int lastIndexOf(Object o); Az utolsó elem indexét adja vissza.
ListIterator<E> listIterator(); Egy iterátort ad vissza a listához
ListIterator<E> listIterator(int index); Egy iterátort ad vissza a listához
E remove(int index); Eltávolít egy elemet az indexe alapján
E set(int index, E element); Új értéket állít be index szerint
List<E> subList(int fromIndex, int toIndex); Egy algyűjteményt ad vissza

"Itt sincs semmi gyökeresen új. Szinte mindent tudok már a kollekciókról, aminek nem tudok nem örülni."

"Nos, azt hiszem, találok valamit, ami meg fog lepni. De folytassuk a felületek vizsgálatát:"

A Set<E> metódusai : interfész:

Mód Leírás
Nincsenek módszerek

"A Set felület nem tartalmaz új metódusokat, csak azokat, amelyeket örököl."

"Igen, láttam, hogy az Interable felületen sem volt semmi.

– Másrészt a kevesebb módszer kevesebb emlékezést jelent!

– Az életigenlő optimizmusod boldoggá tesz.

"A Set felületet két metódusú interfész örökli: SortedSet és NavigableSet. De nem megyek át rajtuk, különben soha nem fejezzük be."

"Ehelyett hadd adjak egy általános képet a Java gyűjteményeket leíró osztályokról és felületekről."

– Hozd fel.

"Akkor kapaszkodj erősen:"

Gyűjteményi felületek - 2

– Hú, ez óriási!

"Nos, ez nem olyan nagy. Ne feledje, hogy az absztrakt osztályok teljesen opcionálisak. De jó, ha megjegyezzük, hogy melyik osztály milyen interfészt valósít meg. Ez gyakran jól jöhet."

– Ó, azt is szeretném megjegyezni, hogy egyes gyűjtemények elavultnak számítanak.

– Melyek azok?

"A Vector, Stack, Dictionary és Hashtable osztályokról beszélek. Ezek a közönséges gyűjtemények szinkronizált (szálbiztos) változatai."

"A Java azonban hozzáadott egy speciális párhuzamossági könyvtárat sok gyűjteménnyel, amelyek nem csak más szálakból érhetők el, hanem sokkal hatékonyabb megvalósításuk is van. A  ConcurrentHashMap sokkal hatékonyabb, mint a Hashtable ."

"Használhatja a Vector, Stack, Dictionary és Hashtable gyűjteményeket, de nem ajánlott."

– Értem, ezt észben tartom.

– Köszönöm, Ellie!