"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:"
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 |
---|---|
|
"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:"
"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!"
GO TO FULL VERSION