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
List
ArrayList
Liste
LinkedList
Linket liste
Vector
Vektor
Stack
Stak
Set
HashSet
Sæt
TreeSet
LinkedHashSet
Queue
PriorityQueue
ArrayQueue
Map
HashMap
Kort/ordbog
TreeMap
HashTable

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
void add(Type value)
Tilføjer valueelementet til samlingen
boolean remove(Type value)
Fjerner valueelementet fra samlingen.
Returnerer true, hvis der var et sådant element
boolean contains(Type value)
Kontrollerer, om samlingen har et valueelement
void clear()
Rydder samlingen og fjerner alle elementer
int size()
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
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
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.