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
List
ArrayList
Lijst
LinkedList
Gelinkte lijst
Vector
Vector
Stack
Stapel
Set
HashSet
Set
TreeSet
LinkedHashSet
Queue
PriorityQueue
Wachtrij
ArrayQueue
Map
HashMap
Kaart/woordenboek
TreeMap
HashTable

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 Collectioninterface, 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 Collectioninterface implementeren. De typen List, Seten Queuezijn allemaal verzamelingen. Collecties in brede zin worden over het algemeen containers genoemd . Deze omvatten typen zoals Mapen arrays.


2. HashSetcollectie

De HashSetklas is een typische vaste verzameling. In veel opzichten is het vergelijkbaar met de ArrayListklas. In sommige opzichten is het een meer primitieve versie.

U kunt een HashSetobject maken met een statement als:

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

Waar Typeis het type van de elementen die we in de collectie zullen opslaan HashSet.

De HashSetklasse heeft methoden zoals deze:

Methode Beschrijving
void add(Type value)
Voegt het valueelement toe aan de verzameling
boolean remove(Type value)
Verwijdert het valueelement uit de verzameling.
Retourneert trueof er zo'n element was
boolean contains(Type value)
Controleert of de collectie een valueelement heeft
void clear()
Wist de verzameling en verwijdert alle elementen
int size()
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
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!");
Maak een HashSetobject dat Stringelementen opslaat.


We voegen begroetingen in verschillende talen toe aan de setvariabele.




Lees een regel van de console.


Als de string in onze begroetingsset zit, nemen we afscheid.


3. Instellen

De Setcollectie 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: ListvsSet

Laten we twee soorten collecties vergelijken: Listen SetWe 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 Setcollectie nodig. De meest populaire implementatie is de HashSetklasse.