HashSet initialiseren op het moment van opbouw

1. Overzicht

In deze korte tutorial introduceren we verschillende methoden van initialiseren van de HashSet met waarden, op het moment van de constructie.

Als u in plaats daarvan de functies van HashSet, verwijs hier naar dit kernartikel.

We duiken in Java ingebouwde methoden sinds Java 5 en eerder gevolgd door nieuw mechanisme geïntroduceerd sinds Java 8. We zullen ook een aangepaste hulpprogramma-methode en ontdek ten slotte de functies van Verzamelingsbibliotheken van derden, Google Guava in het bijzonder.

Als je geluk hebt dat je al naar JDK9 + bent gemigreerd, kun je eenvoudig de methodes van de verzamelfabriek gebruiken.

2. In Java ingebouwde methoden

Laten we beginnen met het onderzoeken van drie ingebouwde mechanismen die beschikbaar zijn sinds de Java 5 of eerder.

2.1. Een ander verzamelingsinstantie gebruiken

We kunnen een bestaand passeren exemplaar van een andere collectie om het Set. In onderstaand voorbeeld gebruiken we een inline gemaakt Lijst:

Set set = new HashSet (Arrays.asList ("a", "b", "c"));

2.2. Anonieme klas gebruiken

In nog een andere benadering kunnen we de anonieme klasse gebruiken om een ‚Äč‚Äčelement aan toe te voegen HashSet.

Let op het gebruik van dubbele accolades. Deze benadering is technisch erg duur omdat het elke keer dat het wordt aangeroepen een anonieme klasse maakt.

Dus afhankelijk van hoe vaak we moeten initialiseren Set wij kunnen probeer deze benadering te vermijden:

Set set = new HashSet () {{add ("a"); add ("b"); add ("c"); }};

2.3. Met behulp van verzamelingshulpprogramma sinds Java 5

De Java's Collecties nut class biedt de methode met de naam singleton om een Set met een enkel element. De Set instantie gemaakt met de singleton methode is onveranderlijk wat betekent dat we er niet meer waarden aan kunnen toevoegen.

Er zijn situaties, vooral bij het testen van eenheden, waarin we een Set met een enkele waarde:

Set set = Collections.singleton ("a");

3. Aangepaste hulpprogramma-methode definiëren

We kunnen een statische finale methode zoals hieronder. De methode accepteert variabele argumenten.

Gebruik makend van Collections.addAll die het verzamelingsobject accepteert en een reeks waarden is beste onder anderen vanwege de lage overhead van het kopiëren van waarden.

De methode maakt gebruik van generieke geneesmiddelen zodat we waarden van elk type kunnen doorgeven:

openbare statische finale Set newHashSet (T ... objs) {Set set = new HashSet (); Collections.addAll (set, objs); retour set; }

De hulpprogramma-methode kan in onze code worden gebruikt, zoals hieronder.

Set set = newHashSet ("a", "b", "c");

4. Met behulp van Stroom Sinds Java 8

Met de introductie van Stroom API in Java 8, we hebben extra opties. We kunnen gebruiken Stroom met Verzamelaars zoals getoond in onderstaande code:

Set = Stream.of ("a", "b", "c") .collect (Collectors.toCollection (HashSet :: new));

5. Gebruik van verzamelbibliotheek van derden

Er zijn meerdere verzamelingsbibliotheken van derden, waaronder Google Guava, Apache Commons Collections en Eclipse Collections om er maar een paar te noemen.

Deze bibliotheken bieden handige hulpprogramma's om verzamelingen zoals Set te initialiseren. Sinds Google Guava is een van de meest gebruikte hier, we hebben er een voorbeeld van. De Guava heeft handige methoden voor veranderlijk en onveranderlijk Set voorwerpen:

Set set = Sets.newHashSet ("a", "b", "c");

Evenzo heeft Guava een hulpprogramma-klasse voor het maken van onveranderlijk Set gevallen, zoals we kunnen zien in het onderstaande voorbeeld.

Set set = ImmutableSet.of ("a", "b", "c");

6. Conclusie

Concluderend hebben we meerdere manieren gezien waarop een HashSet kan worden geïnitialiseerd terwijl het is opgebouwd. Deze benaderingen dekken op geen enkele manier alle mogelijke manieren. Het was gewoon een poging om de meest voorkomende manieren te laten zien.

Een dergelijke benadering die hier niet wordt behandeld, zou het gebruik van de objectbuilder kunnen zijn om een Set.

Zoals altijd is er een werkcodevoorbeeld beschikbaar op GitHub.