Invoering

Bijna elk programma moet een aantal gegevens opslaan. Het kunnen strings en getallen, objecten, enzovoort zijn. Arrays zijn een uitstekende opslagoplossing. Maar arrays hebben bepaalde beperkingen. Hun grootte staat bijvoorbeeld vast, elementen kunnen niet worden verwijderd en u kunt geen elementen in het midden invoegen. Collecties zijn gemaakt om deze en andere beperkingen te omzeilen. Alle soorten verzamelingen (en er zijn er veel, zoals we later in deze les zullen zien) hebben de mogelijkheid om zichzelf dynamisch te vergroten of verkleinen. Sommige soorten collecties kunnen geordende elementen opslaan en nieuwe elementen automatisch op volgorde zetten als ze worden toegevoegd.

In deze les maken we kennis met de klassenhiërarchie van de basisverzamelingen in het Java Collections Framework . Er zijn ook verschillende alternatieve bibliotheken die de mogelijkheden van het standaard Java Collections Framework uitbreiden . De meest populaire hiervan is Guava (Google Collections Library).

*Niet alle interfaces en klassen zijn weergegeven in het diagram. Sommige zijn weggelaten om het begrijpelijker te maken.

Basisinterfaces

Het diagram laat zien dat er twee basisinterfaces zijn die zijn geïmplementeerd om de rest van de klassen en interfaces te vormen.

Laten we deze interfaces eens bekijken:

  1. Verzameling — Een gewone verzameling die een reeks elementen (objecten) bevat. Deze verzameling heeft basismethoden voor het werken met elementen: invoegen ( add , addAll ), verwijderen ( verwijderen , alles verwijderen , wissen ), zoeken ( bevat , bevatAlles ), controleren of de verzameling leeg is ( isEmpty ) en grootte ophalen ( grootte ).

  2. Kaart — Een verzameling gestructureerd als sleutel-waardeparen. Bovendien is elke sleutel in een Map uniek: geen twee sleutels hebben identieke waarden. Deze verzameling wordt ook wel een woordenboek genoemd . Kaart is een aparte interface. Het implementeert niet de Collection- interface, maar maakt deel uit van het Java Collections Framework .

Handige methoden voor het werken met elementen in een kaart :

  • invoegen ( zet , zetAlles )

  • get ( get , keySet , waarden , entrySet )

  • verwijderen ( verwijderen , wissen )

  • zoeken ( bevatSleutel , bevatWaarde )

  • controleer of de verzameling leeg is ( isEmpty )

  • maat krijgen ( maat )

Laten we nu meer over elk van hen praten.

Collectie-interface

De Collection- interface breidt de Iterable- interface uit, die een enkele methode heeft: iterator() . Voor ons betekent dit dat elke verzameling die Iterable overerft , een iterator kan retourneren.

Een iterator is een speciaal object dat u kunt gebruiken om toegang te krijgen tot de elementen van elke verzameling, ongeacht de specifieke implementatie ervan.

De figuur laat zien dat 3 interfaces de Collectie- interface erven: Lijst , Wachtrij en Set . Nu zullen we ze allemaal kort bekijken.

Lijst is een geordende verzameling die dubbele waarden toestaat. Een bijzonder kenmerk van een lijst is dat de elementen genummerd zijn en toegankelijk zijn op nummer (index).

Een wachtrij slaat elementen op in de volgorde waarin ze aan de wachtrij zijn toegevoegd.

In tegenstelling tot een lijst vertegenwoordigt een set een ongeordende verzameling die geen herhaalde elementen toestaat. De Set- interface komt overeen met het concept van een wiskundige set .

Implementaties van de kaartinterface

We kunnen zien dat de kaartinterface een afbeelding vertegenwoordigt tussen unieke sleutels en waarden.


interface Map<K, V>

waarbij K het type sleutels is en V het type opgeslagen waarden.

Met behulp van een sleutel kunnen we gegevens uit een kaart extraheren . Om een ​​element aan een kaart toe te voegen , moeten we een sleutel en een waarde specificeren.

Laten we eens kijken naar enkele implementaties van Map :

  1. HashMap is een implementatie van Map die is gebaseerd op hashtabellen. Het kan sleutels en waarden van elk type opslaan, inclusief null . De volgorde van de elementen is niet gegarandeerd.

  2. LinkedHashMap is een gegevensstructuur die gegevens opslaat als een gekoppelde lijst met elementen. De elementen verschijnen in de lijst in de volgorde waarin ze zijn toegevoegd.

  3. TreeMap implementeert de SortedMap- interface (via de NavigableMap- interface). De elementen in deze structuur worden in gesorteerde volgorde opgeslagen (wanneer een nieuw element wordt toegevoegd, wordt de verzameling automatisch gesorteerd). TreeMap is geweldig voor het opslaan van grote hoeveelheden gesorteerde gegevens die snel kunnen worden opgehaald.

Verouderde collecties:

Java heeft verouderde collecties van eerdere versies (om achterwaartse compatibiliteit te behouden). Deze oude verzamelingen mogen niet in nieuwe code worden gebruikt:

  • Opsomming - analoog aan de Iterator- interface;

  • Vector — een geordende lijst met elementen en analoog aan deklasse ArrayList ;

  • Stapel — een implementatie van de stapelgegevensstructuur, die elementen opslaat en manipuleert, zoals hoe u zou omgaan met een stapel boeken. Er zijn methodes om elementen toe te voegen aan de stapel ( push ) en ze er weer af te halen ( pop );

  • Woordenboek — analoog aan de kaartinterface , maar het is een abstracte klasse;

  • Hashtable - analoog aan HashMap .

In dit artikel kunt u meer lezen over het Collections Framework .