1. Containers en collecties
Containers of verzamelingen zijn klassen waarmee u meerdere objecten tegelijk kunt opslaan en verwerken. U kent al twee soorten containers: arrays en lijsten.
Java heeft enkele tientallen collecties, die elk op hun eigen specifieke manier elementen opslaan. Hier zijn er een paar:
Verzameling | Klas | Beschrijving |
---|---|---|
|
|
Lijst |
|
Gelinkte lijst | |
|
Vector | |
|
Stapel | |
|
|
Set |
|
||
|
||
|
|
Wachtrij |
|
||
|
|
Kaart/woordenboek |
|
||
|
De namen zijn hier enigszins dubbelzinnig. In de meeste programmeertalen worden al deze gegevensstructuren verzamelingen genoemd, maar niet in Java. In Java implementeren sommige van deze klassen de Collection
interface, terwijl andere dat niet doen.
Dienovereenkomstig worden verzamelingen onderverdeeld in verzamelingen in brede zin en verzamelingen in enge zinCollection
(alleen die welke de interface implementeren ).
Om verwarring te voorkomen, bedoelen we als we het hebben over collecties in de enge zin van het woord, dat wil zeggen klassen die de Collection
interface implementeren. De typen List
, Set
en Queue
zijn allemaal verzamelingen. Collecties in brede zin worden over het algemeen containers genoemd . Deze omvatten typen zoals Map
en arrays.
2. HashSet
collectie
De HashSet
klas is een typische vaste verzameling. In veel opzichten is het vergelijkbaar met de ArrayList
klas. In sommige opzichten is het een meer primitieve versie.
U kunt een HashSet
object maken met een statement als:
HashSet<Type> name = new HashSet<Type>();
Waar Type
is het type van de elementen die we in de collectie zullen opslaan HashSet
.
De HashSet
klasse heeft methoden zoals deze:
Methode | Beschrijving |
---|---|
|
Voegt het value element toe aan de verzameling |
|
Verwijdert het value element uit de verzameling. Retourneert true of er zo'n element was |
|
Controleert of de collectie een value element heeft |
|
Wist de verzameling en verwijdert alle elementen |
|
Retourneert het aantal elementen in de verzameling |
Hier is een voorbeeld van het gebruik van een set.
Laten we een programma schrijven dat afscheid neemt van de gebruiker als hij of zij hallo zegt. Om het interessanter te maken, geven we ons programma de mogelijkheid om "hallo" in verschillende talen te begrijpen.
Code | Opmerking |
---|---|
|
Maak een HashSet object dat String elementen opslaat. We voegen begroetingen in verschillende talen toe aan de set variabele. Lees een regel van de console. Als de string in onze begroetingsset zit, nemen we afscheid. |
3. Instellen
De Set
collectie is ontworpen om een reeks elementen te bevatten. Daarom wordt het een Set
(set) genoemd. Deze collectie heeft drie kenmerken.
Operaties op een set
Met een set kun je maar drie dingen doen: elementen aan de set toevoegen, elementen uit de set verwijderen en controleren of de set een specifiek element bevat. Dat is het.
Geen bestelling
Elementen in deze verzameling hebben geen indexen. U kunt een element niet ophalen via een index, of een waarde schrijven naar een verzameling bij een specifieke index. Een set heeft geen methoden get()
en set()
.
Unieke elementen
Alle elementen in een set zijn uniek. In tegenstelling tot een lijst kan een set slechts één exemplaar van een element bevatten. Een object zit in de set of niet - er is geen derde optie. Je kunt niet drie keer zwart toevoegen aan een reeks kleuren. Het is er of het is er niet.
Elementen zoeken
Wanneer u een nieuw element toevoegt, een element verwijdert of controleert of een element in een set bestaat, wordt er in de methode naar het element gezocht. Het doorgegeven element wordt eerst vergeleken met de elementen van de verzameling door hashCode()
, en vervolgens, als de geretourneerde waarden door hashCode()
overeenkomen, door equals()
.
4. Collecties vergelijken: List
vsSet
Laten we twee soorten collecties vergelijken: List
en Set
We kijken naar de belangrijkste verschillen, wanneer de ene voordeliger is dan de andere, en vice versa.
Laten we Lijst en Set proberen te vergelijken met speelgoed als voorbeeld.
De List
(lijst)collectie is als een set speelgoed langs de muur in een speelkamer. Je kunt speelgoed toevoegen aan het einde van de lijst. Als het echt nodig is, kun je hem ook in het midden plaatsen (er moet dan wat bestaand speelgoed worden verplaatst).
Elk speeltje heeft een index. U kunt naar een stuk speelgoed verwijzen op basis van de index en ook speelgoed nummer 7 vervangen door speelgoed nummer 13. U kunt speelgoed nummer 4 uit de lijst verwijderen. Ten slotte kunt u de index van elk stuk speelgoed in de lijst leren.
De Set
(set)collectie is meer een stapel speelgoed midden op de vloer. Je kunt speelgoed aan de stapel toevoegen en speelgoed van de stapel verwijderen. Maar aan dit speelgoed is geen vaste index gekoppeld.
Of stel dat je speelgoed uitkiest voor de verjaardag van je kind. Eerst bedenk je of hij het speeltje al heeft. Al het speelgoed dat hij al heeft, vormt een set speelgoed dat je niet zult kopen.
Vanuit dit oogpunt kun je zien dat de volgorde van speelgoed in een set "speelgoed dat al bestaat" er niet toe doet, en het maakt ook niet uit of de jarige twee exemplaren van een bepaald stuk speelgoed heeft. U bent niet geïnteresseerd in de volgorde of het aantal van elk speeltje. Waar je om geeft, is het kennen van elk uniek speeltje dat in de set bestaat.
Voor dit soort gevallen heb je de Set
collectie nodig. De meest populaire implementatie is de HashSet
klasse.
GO TO FULL VERSION