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 Collectiongræ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, Setog Queueer alle samlinger. Samlinger i bred forstand kaldes generelt containere . Disse omfatter typer som Mapog arrays.
2. HashSetindsamling
Klassen HashSeter 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 HashSetobjekt ved hjælp af en sætning som:
HashSet<Type> name = new HashSet<Type>();
Hvor Typeer typen af de elementer, vi vil gemme i HashSetsamlingen.
Klassen HashSethar metoder som denne:
| Metode | Beskrivelse |
|---|---|
|
Tilføjer valueelementet til samlingen |
|
Fjerner valueelementet fra samlingen. Returnerer true, hvis der var et sådant element |
|
Kontrollerer, om samlingen har et valueelement |
|
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 HashSetobjekt, der gemmer Stringelementer. 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 Seter 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: ListvsSet
Lad os sammenligne to typer samlinger: Listog Setvi 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 Setsamlingen. Dens mest populære implementering er HashSetklassen.
GO TO FULL VERSION