1. Containere og samlinger
Containere eller samlinger er klasser, der lader dig gemme og behandle flere objekter på én gang. Du kender allerede to slags containere: arrays og lister.
Java har flere dusin samlinger, som hver især gemmer elementer på sin egen specifikke måde. Her er et par af dem:
Kollektion | klasse | Beskrivelse |
---|---|---|
|
|
Liste |
|
Linket liste | |
|
Vektor | |
|
Stak | |
|
|
Sæt |
|
||
|
||
|
|
Kø |
|
||
|
|
Kort/ordbog |
|
||
|
Navnene er noget tvetydige her. I de fleste programmeringssprog kaldes alle disse datastrukturer for samlinger, men ikke i Java. I Java implementerer nogle af disse klasser grænsefladen Collection
, mens andre ikke gør.
Samlinger er derfor opdelt i samlinger i bred forstand og samlinger i snæver forstand (kun dem, der implementerer Collection
grænsefladen).
Så for at undgå forvirring, når vi taler om samlinger, mener vi i ordets snævre betydning, dvs. klasser, der implementerer grænsefladen Collection
. Typerne List
, Set
og Queue
er alle samlinger. Samlinger i bred forstand kaldes generelt containere . Disse omfatter typer som Map
og arrays.
2. HashSet
indsamling
Klassen HashSet
er en typisk sætsamling. På mange måder ligner det klassen ArrayList
. På nogle måder er det en mere primitiv version.
Du kan oprette et HashSet
objekt ved hjælp af en sætning som:
HashSet<Type> name = new HashSet<Type>();
Hvor Type
er typen af de elementer, vi vil gemme i HashSet
samlingen.
Klassen HashSet
har metoder som denne:
Metode | Beskrivelse |
---|---|
|
Tilføjer value elementet til samlingen |
|
Fjerner value elementet fra samlingen. Returnerer true , hvis der var et sådant element |
|
Kontrollerer, om samlingen har et value element |
|
Rydder samlingen og fjerner alle elementer |
|
Returnerer antallet af elementer i samlingen |
Her er et eksempel på brug af et sæt.
Lad os skrive et program, der siger farvel til brugeren, hvis han eller hun siger hej. For at gøre det mere interessant, giver vi vores program mulighed for at forstå "hej" på flere sprog.
Kode | Bemærk |
---|---|
|
Opret et HashSet objekt, der gemmer String elementer. Vi tilføjer hilsner på forskellige sprog til variablen set . Læs en linje fra konsollen. Hvis snoren er i vores sæt af hilsner, så siger vi farvel. |
3. Indstil
Kollektionen Set
er designet til at rumme et sæt elementer. Det er derfor, det kaldes et Set
(sæt). Denne samling har tre funktioner.
Operationer på et sæt
Der er kun tre ting, du kan gøre med et sæt: tilføje elementer til sættet, fjerne elementer fra sættet og kontrollere, om sættet indeholder et bestemt element. Det er det.
Ingen ordre
Elementer i denne samling har ikke indeks. Du kan ikke få et element ved et indeks eller skrive en værdi til en samling ved et bestemt indeks. Et sæt har ingen get()
og set()
metoder.
Unikke elementer
Alle elementer i et sæt er unikke. I modsætning til en liste kan et sæt kun indeholde én forekomst af et element. Et objekt er enten i sættet eller ej - der er ingen tredje mulighed. Du kan ikke tilføje sort tre gange til et sæt farver. Enten er den der, eller også er den ikke.
At finde elementer
Når du tilføjer et nyt element, fjerner et element eller kontrollerer, om et element findes i et sæt, udføres en søgning efter elementet i metoden. Det beståede element sammenlignes med elementerne i samlingen først med hashCode()
, og derefter, hvis værdierne, der returneres af hashCode()
match, med equals()
.
4. Sammenligning af samlinger: List
vsSet
Lad os sammenligne to typer samlinger: List
og Set
vi ser på de vigtigste forskelle, når den ene er mere fordelagtig end den anden, og omvendt.
Lad os prøve at sammenligne List og Set ved at bruge legetøj som eksempel.
List
(liste)samlingen er som et sæt legetøj arrangeret langs væggen i et legerum. Du kan tilføje et legetøj til slutningen af listen. Hvis du virkelig har brug for det, kan du også indsætte det i midten (men noget af det eksisterende legetøj skal flyttes).
Hvert legetøj har et indeks. Du kan henvise til et legetøj ved dets indeks og også erstatte legetøj nummer 7 med legetøj nummer 13. Du kan fjerne legetøj nummer 4 fra listen. Endelig kan du lære indekset for hvert legetøj på listen.
Set
(sæt)kollektionen er mere som en bunke legetøj midt på gulvet. Du kan tilføje et legetøj til bunken, og du kan fjerne et legetøj fra bunken. Men dette legetøj har ikke et fast indeks forbundet med dem.
Eller antag, at du vælger et legetøj til dit barns fødselsdag. Først tænker du på, om han allerede har legetøjet. Alt det legetøj, han allerede har, udgør et sæt legetøj, som du ikke vælger at købe.
Ud fra dette synspunkt kan du se, at rækkefølgen af legetøj i et sæt "legetøj, der allerede eksisterer", er ligegyldigt, og det er heller ikke ligegyldigt, om fødselaren har to forekomster af et bestemt legetøj. Du er ikke interesseret i rækkefølgen eller antallet af hvert legetøj. Det, du interesserer dig for, er at kende hvert unikt legetøj, der findes i sættet.
Til sager som denne har du brug for Set
samlingen. Dens mest populære implementering er HashSet
klassen.
GO TO FULL VERSION