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
List
ArrayList
Liste
LinkedList
Koblet liste
Vector
Vektor
Stack
Stable
Set
HashSet
Sett
TreeSet
LinkedHashSet
Queue
PriorityQueue
ArrayQueue
Map
HashMap
Kart/ordbok
TreeMap
HashTable

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 Collectiongrensesnittet).

Så for å unngå forvirring, når vi snakker om samlinger mener vi i ordets snevre betydning, dvs. klasser som implementerer grensesnittet Collection. List, Setog typene Queueer alle samlinger. Samlinger i vid forstand kalles generelt containere . Disse inkluderer typer som Mapog arrays.


2. HashSetsamling

Klassen HashSeter en typisk settsamling. På mange måter ligner det på ArrayListklassen. På noen måter er det en mer primitiv versjon.

Du kan lage et HashSetobjekt ved å bruke en uttalelse som:

HashSet<Type> name = new HashSet<Type>();

Hvor Typeer typen av elementene vi skal lagre i HashSetsamlingen.

Klassen HashSethar metoder som dette:

Metode Beskrivelse
void add(Type value)
Legger til valueelementet i samlingen
boolean remove(Type value)
Fjerner valueelementet fra samlingen.
Returnerer truehvis det var et slikt element
boolean contains(Type value)
Sjekker om samlingen har et valueelement
void clear()
Tømmer samlingen, fjerner alle elementene
int size()
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
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!");
Lag et HashSetobjekt som lagrer Stringelementer.


Vi legger til hilsener på forskjellige språk til setvariabelen.




Les en linje fra konsollen.


Hvis strengen er i vårt sett med hilsener, så sier vi farvel.


3. Sett

Kolleksjonen Seter 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: ListvsSet

La oss sammenligne to typer samlinger: Listog Setvi 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 Setsamlingen. Den mest populære implementeringen er HashSetklassen.