Introduksjon

Nesten alle programmer trenger å lagre et sett med data. Det kan være strenger og tall, objekter og så videre. Arrays er en suveren lagringsløsning. Men matriser har visse begrensninger. For eksempel er størrelsen deres fast, elementer kan ikke fjernes, og du kan ikke sette inn elementer i midten. Samlinger ble opprettet for å omgå disse og andre begrensninger. Alle typer samlinger (og det er mange av dem, som vi skal se senere i denne leksjonen) har muligheten til å endre størrelsen på seg selv dynamisk. Noen samlingstyper kan lagre bestilte elementer og automatisk sette nye elementer i rekkefølge etter hvert som de legges til.

I denne leksjonen blir vi kjent med klassehierarkiet til basissamlingene i Java Collections Framework . Det finnes også forskjellige alternative biblioteker som utvider funksjonene til standard Java Collections Framework . Den mest populære av disse er Guava (Google Collections Library).

*Ikke alle grensesnitt og klasser er representert i diagrammet. Noen ble utelatt for å gjøre det lettere å forstå.

Grunnleggende grensesnitt

Diagrammet viser at det er to grunnleggende grensesnitt som er implementert for å danne resten av klassene og grensesnittene.

La oss ta en titt på disse grensesnittene:

  1. Samling — En vanlig samling som inneholder et sett med elementer (objekter). Denne samlingen har grunnleggende metoder for å jobbe med elementer: sette inn ( add , addAll ), remove ( remove , removeAll , clear ), søk ( contains , containsAll ), sjekk om samlingen er tom ( isEmpty ) og få størrelse ( size ).

  2. Kart — En samling strukturert som nøkkelverdi-par. Dessuten er hver nøkkel i et kart unik: ingen to nøkler har identiske verdier. Denne samlingen kalles noen ganger en ordbok . Kart er et eget grensesnitt. Den implementerer ikke samlingsgrensesnittet , men er en del av Java Collections Framework .

Nyttige metoder for å arbeide med elementer i et kart :

  • sette inn ( sett , putAll )

  • få ( get , keySet , values ​​, entrySet )

  • fjerne ( fjerne , fjerne )

  • søk ( containsKey , containsValue )

  • sjekk om samlingen er tom ( isEmpty )

  • få størrelse ( størrelse )

La oss nå snakke mer om hver av dem.

Samlingsgrensesnitt

Samling - grensesnittet utvider Iterable- grensesnittet, som har en enkelt metode: iterator() . For oss betyr dette at enhver samling som arver Iterable vil kunne returnere en iterator.

En iterator er et spesielt objekt som du kan bruke for å få tilgang til elementene i en samling, uavhengig av dens spesifikke implementering.

Figuren viser at 3 grensesnitt arver innsamlingsgrensesnittet : List , Queue og Set . Nå skal vi se på hver av dem kort.

List er en ordnet samling som tillater dupliserte verdier. Et spesielt trekk ved en liste er at elementene er nummererte og kan nås med nummer (indeks).

En lagrer elementer i den rekkefølgen de ble lagt til i køen.

I motsetning til en liste, representerer et sett en uordnet samling som ikke tillater gjentatte elementer. Sett - grensesnittet tilsvarer konseptet med et matematisk sett .

Implementeringer av kartgrensesnittet

Vi kan se at kartgrensesnittet representerer en kartlegging mellom unike nøkler og verdier.


interface Map<K, V>

hvor K er typen til tastene og V er typen av lagrede verdier.

Ved å bruke en nøkkel kan vi trekke ut data fra et kart . For å legge til et element i et kart må vi spesifisere en nøkkel og en verdi.

La oss se på noen implementeringer av Map :

  1. HashMap er en implementering av Map som er basert på hashtabeller. Den kan lagre nøkler og verdier av alle typer, inkludert null . Rekkefølgen på elementene er ikke garantert.

  2. LinkedHashMap er en datastruktur som lagrer data som en koblet liste over elementer. Elementene vises i listen i den rekkefølgen de ble lagt til.

  3. TreeMap implementerer SortedMap- grensesnittet (via NavigableMap- grensesnittet). Elementene i denne strukturen lagres i sortert rekkefølge (når et nytt element legges til, sorteres samlingen automatisk). TreeMap er flott for å lagre store mengder sortert data med rask henting.

Utdaterte samlinger:

Java har foreldede samlinger fra tidligere versjoner (for å opprettholde bakoverkompatibilitet). Disse gamle samlingene skal ikke brukes i ny kode:

  • Oppregning — analogt med Iterator- grensesnittet;

  • Vector — en ordnet liste over elementer og analog med ArrayList- klassen;

  • Stabel — en implementering av stabeldatastrukturen, som lagrer og manipulerer elementer som hvordan du vil samhandle med en stabel med bøker. Det finnes metoder for å legge til elementer i stabelen ( push ) og ta dem av ( pop );

  • Ordbok — analogt med kartgrensesnittet , men det er en abstrakt klasse;

  • Hashtable - analogt med HashMap .

Du kan lese mer om Samlingsrammeverket i denne artikkelen .