"Hei, Amigo!"

"Hei, Ellie!"

"I dag skal vi vikle hodet rundt strukturen til samlinger en gang for alle."

— Jeg har ventet lenge på dette.

"Du vet allerede hva samlinger er, og du vet hvordan du jobber med dem. Det er på tide å organisere kunnskapen din i et strengt system. Da vil mange "hvorfor" og "hvordan"-spørsmål forsvinne, og det meste vil bli åpenbart."

" Samlingsgrensesnitt . Arvestrukturen til samlingsgrensesnitt ser omtrent slik ut:"

Samlingsgrensesnitt - 1

Legg merke til to ting.

For det første er alt du ser her et grensesnitt.

For det andre betyr pilene «arver».

"Med andre ord, List, Set og Queue arver samlingen, men kartet gjør det ikke?"

"Jepp. Abstrakte klasser arver deretter disse grensesnittene, og i sin tur arver implementeringene du kjenner til disse abstrakte klassene:  ArrayList, Hashtable, TreeSet, ... "

"Du har rett."

"La oss nå se hva disse grensesnittmetodene er til for:"

Metoder for Iterable<E>: -grensesnittet:

Metoder Beskrivelse
Iterator<T> iterator(); Returnerer et iteratorobjekt.

— Det virker ikke som nok.

"Vel, det er hvor mange det er. Det er alt for iteratorer. Vi vil ikke dekke dem akkurat nå, men vi vil dekke dem i detalj snart."

Metoder for samlingen<E>: grensesnitt:

Metoder Beskrivelse
boolean add(E e); Legger til et element i samlingen
boolean addAll(Collection<? extends E> c); Legger til elementer i samlingen
void clear(); Fjerner alle elementer fra samlingen
boolean contains(Object o); Sjekker om samlingen inneholder elementet.
boolean containsAll(Collection<?> c); Sjekker om samlingen inneholder elementene.
boolean equals(Object o); Sjekker om samlinger er likeverdige
int hashCode(); Returnerer hash-koden
boolean isEmpty(); Sjekker om samlingen er tom.
Iterator<E> iterator(); Returnerer et iteratorobjekt
boolean remove(Object o); Fjerner et element fra samlingen
boolean removeAll(Collection<?> c); Fjerner elementer fra samlingen
boolean retainAll(Collection<?> c); Fjerner alle elementer som ikke er i c
int size(); Returnerer samlingens størrelse
Object[] toArray(); Konverterer samlingen til en matrise
<T> T[] toArray(T[] a); Konverterer samlingen til en matrise

"Jeg er allerede solid på alt her. Jeg har brukt halvparten av disse metodene, og jeg har møtt den andre halvparten."

"Flott, la oss fortsette da."

Metoder for  listen<E>: grensesnitt:

Metoder Beskrivelse
void add(int index, E element); Legger til elementer i midten av samlingen
boolean addAll(int index, Collection<? extends E> c); Legger til elementer i samlingen
E get(int index); Returnerer et element etter indeks
int indexOf(Object o); Returnerer indeksen (tallet) til et element
int lastIndexOf(Object o); Returnerer indeksen til det siste elementet.
ListIterator<E> listIterator(); Returnerer en iterator for listen
ListIterator<E> listIterator(int index); Returnerer en iterator for listen
E remove(int index); Fjerner et element etter indeksen
E set(int index, E element); Angir en ny verdi etter indeks
List<E> subList(int fromIndex, int toIndex); Returnerer en undersamling

"Ingenting radikalt nytt her heller. Jeg kan allerede nesten alt om samlinger, noe jeg ikke kan annet enn å være glad for."

"Vel, jeg tror jeg kan finne noe som vil overraske deg. Men la oss fortsette å undersøke grensesnitt:"

Metoder for settet<E>: grensesnitt:

Metoder Beskrivelse
Ingen metoder

"Set-grensesnittet har ingen nye metoder - bare de det arver."

"Ja, jeg så at Interable-grensesnittet heller ikke hadde noe.

"På den annen side betyr færre metoder mindre å huske!"

"Din livsbekreftende optimisme gjør meg glad."

"Set-grensesnittet er arvet av to grensesnitt med metoder: SortedSet og NavigableSet. Men jeg vil ikke gå over dem, ellers blir vi aldri ferdige."

"I stedet, la meg gi deg et generelt bilde av klassene og grensesnittene som beskriver samlinger i Java."

"Ta med det."

"Så hold deg fast:"

Samlingsgrensesnitt - 2

"Wow, det er stort!"

"Vel, den er ikke så stor. Husk også at abstrakte klasser er helt valgfrie. Men det er greit å huske hvilken klasse som implementerer hvilke grensesnitt. Det kan være nyttig ganske ofte."

"Å, jeg vil også merke meg at noen samlinger anses som foreldet."

"Hvilke er de?"

"Jeg snakker om klassene Vector, Stack, Dictionary og Hashtable. Dette er synkroniserte (trådsikre) versjoner av vanlige samlinger."

"Men Java har lagt til et spesielt samtidighetsbibliotek med mange samlinger som ikke bare kan nås fra andre tråder, men som også har en mye mer effektiv implementering.  ConcurrentHashMap er mye mer effektivt enn Hashtable ."

"Du kan bruke Vector-, Stack-, Dictionary- og Hashtable-samlingene, men det anbefales ikke."

"Skjønner det, jeg skal ha det i bakhodet."

"Takk, Ellie!"