1. Containere og samlinger
Beholdere eller samlinger er klasser som lar deg lagre og behandle flere objekter samtidig. Du kjenner allerede to typer beholdere: matriser og lister.
Java har flere dusin samlinger, som hver lagrer elementer på sin egen spesifikke måte. Her er noen av dem:
Samling | Klasse | Beskrivelse |
---|---|---|
|
|
Liste |
|
Koblet liste | |
|
Vektor | |
|
Stable | |
|
|
Sett |
|
||
|
||
|
|
Kø |
|
||
|
|
Kart/ordbok |
|
||
|
Navnene er noe tvetydige her. I de fleste programmeringsspråk kalles alle disse datastrukturene samlinger, men ikke i Java. I Java implementerer noen av disse klassene grensesnittet Collection
, mens andre ikke gjør det.
Følgelig er samlinger delt inn i samlinger i vid forstand og samlinger i snever forstand (bare de som implementerer Collection
grensesnittet).
Så for å unngå forvirring, når vi snakker om samlinger mener vi i ordets snevre betydning, dvs. klasser som implementerer grensesnittet Collection
. List
, Set
og typene Queue
er alle samlinger. Samlinger i vid forstand kalles generelt containere . Disse inkluderer typer som Map
og arrays.
2. HashSet
samling
Klassen HashSet
er en typisk settsamling. På mange måter ligner det på ArrayList
klassen. På noen måter er det en mer primitiv versjon.
Du kan lage et HashSet
objekt ved å bruke en uttalelse som:
HashSet<Type> name = new HashSet<Type>();
Hvor Type
er typen av elementene vi skal lagre i HashSet
samlingen.
Klassen HashSet
har metoder som dette:
Metode | Beskrivelse |
---|---|
|
Legger til value elementet i samlingen |
|
Fjerner value elementet fra samlingen. Returnerer true hvis det var et slikt element |
|
Sjekker om samlingen har et value element |
|
Tømmer samlingen, fjerner alle elementene |
|
Returnerer antall elementer i samlingen |
Her er et eksempel på bruk av et sett.
La oss skrive et program som sier farvel til brukeren hvis han eller hun sier hei. For å gjøre det mer interessant, vil vi gi programmet vårt muligheten til å forstå "hei" på flere språk.
Kode | Merk |
---|---|
|
Lag et HashSet objekt som lagrer String elementer. Vi legger til hilsener på forskjellige språk til set variabelen. Les en linje fra konsollen. Hvis strengen er i vårt sett med hilsener, så sier vi farvel. |
3. Sett
Kolleksjonen Set
er designet for å inneholde et sett med elementer. Det er derfor det kalles et Set
(sett). Denne samlingen har tre funksjoner.
Operasjoner på et sett
Det er bare tre ting du kan gjøre med et sett: legge til elementer i settet, fjerne elementer fra settet og sjekke om settet inneholder et spesifikt element. Det er det.
Ingen ordre
Elementer i denne samlingen har ikke indekser. Du kan ikke få et element ved en indeks, eller skrive en verdi til en samling ved en bestemt indeks. Et sett har ingen get()
og set()
metoder.
Unike elementer
Alle elementene i et sett er unike. I motsetning til en liste kan et sett bare inneholde én forekomst av et element. Et objekt er enten i settet eller ikke - det er ikke noe tredje alternativ. Du kan ikke legge til svart tre ganger i et sett med farger. Det er enten der eller så er det ikke.
Finne elementer
Når du legger til et nytt element, fjerner et element eller sjekker om et element finnes i et sett, utføres et søk etter elementet i metoden. Det beståtte elementet sammenlignes med elementene i samlingen først med hashCode()
, og deretter hvis verdiene returnert ved hashCode()
samsvar, med equals()
.
4. Sammenligning av samlinger: List
vsSet
La oss sammenligne to typer samlinger: List
og Set
vi skal se på hovedforskjellene når den ene er mer fordelaktig enn den andre, og omvendt.
La oss prøve å sammenligne List og Set ved å bruke leker som eksempel.
List
(liste)samlingen er som et sett med leker arrangert langs veggen i et lekerom. Du kan legge til et leketøy på slutten av listen. Hvis du virkelig trenger det, kan du også sette den inn i midten (men noen av de eksisterende lekene må flyttes).
Hver leke har en indeks. Du kan referere til et leketøy etter indeksen og også erstatte leketøy nummer 7 med leke nummer 13. Du kan fjerne leke nummer 4 fra listen. Til slutt kan du lære indeksen til hver leke i listen.
Set
(sett)samlingen er mer som en haug med leker midt på gulvet. Du kan legge til en leke i haugen, og du kan fjerne en leke fra haugen. Men disse lekene har ikke en fast indeks knyttet til seg.
Eller anta at du velger et leketøy til barnets bursdag. Først tenker du på om han har leken allerede. Alle lekene han allerede har, utgjør et sett med leker som du ikke velger å kjøpe.
Fra dette synspunktet kan du se at rekkefølgen på leker i et sett med "leker som allerede eksisterer" ikke spiller noen rolle, og heller ikke om bursdagsbarnet har to forekomster av en bestemt leke. Du er ikke interessert i rekkefølgen eller nummeret på hver leke. Det du bryr deg om er å kjenne til hvert unike leketøy som finnes i settet.
For saker som dette trenger du Set
samlingen. Den mest populære implementeringen er HashSet
klassen.
GO TO FULL VERSION