Initialisering af HashSet på tidspunktet for byggeriet

1. Oversigt

I denne hurtige vejledning introducerer vi forskellige metoder til initialisering af HashSet med værdier på tidspunktet for dets konstruktion.

Hvis du i stedet søger at udforske funktionerne i HashSet, henvises til denne kerneartikel her.

Vi dykker ned i Java indbyggede metoder siden Java 5 og før efterfulgt af nye mekanisme introduceret siden Java 8. Vi ser også en brugerdefineret hjælpemetode og endelig udforske de funktioner, der leveres af Tredjeparts samling biblioteker, Især Google Guava.

Hvis du er heldig at have migreret til JDK9 + allerede, kan du simpelthen bruge metoder til indsamling fra fabrikken.

2. Java-indbyggede metoder

Lad os begynde med at undersøge tre indbyggede tilgængelige mekanismer siden Java 5 eller før.

2.1. Brug af en anden indsamlingsforekomst

Vi kan passere en eksisterende forekomst af en anden samling at initialisere Sæt. I nedenstående eksempel bruger vi en oprettet inline Liste:

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

2.2. Brug af Anonym klasse

I endnu en anden tilgang kan vi bruge den anonyme klasse til at føje et element til HashSet.

Bemærk brugen af ​​dobbelt krøllede seler. Denne tilgang er teknisk meget dyrt da det opretter en anonym klasse, hver gang den kaldes.

Så afhængigt af hvor ofte vi har brug for at initialisere Sæt vi kan prøv at undgå at bruge denne tilgang:

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

2.3. Brug af samlingens værktøjsmetode siden Java 5

Java'erne Samlinger hjælpeprogram klasse giver den navngivne metode singleton at oprette en Sæt med et enkelt element. Det Sæt forekomst oprettet med singleton metode er uforanderlig hvilket betyder, at vi ikke kan tilføje flere værdier til det.

Der er situationer især i enhedstest, hvor vi har brug for at oprette en Sæt med en enkelt værdi:

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

3. Definition af brugerdefineret værktøjsmetode

Vi kan definere en statisk endelig metode som nedenfor. Metoden accepterer variable argumenter.

Ved brug af Collections.addAll som accepterer samleobjektet, og en række værdier er bedst blandt andre på grund af den lave overhead af kopieringsværdier.

Det metoden bruger generiske stoffer så vi kan overføre værdier af enhver type:

offentlig statisk endelig Set newHashSet (T ... objs) {Set set = new HashSet (); Collections.addAll (sæt, objs); retur sæt; }

Funktionsmetoden kan bruges i vores kode som nedenfor.

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

4. Brug Strøm Siden Java 8

Med introduktionen af Strøm API i Java 8, vi har yderligere muligheder. Vi kan bruge Strøm med Samlere som vist i nedenstående kode:

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

5. Brug af tredjepartssamlingsbibliotek

Der er flere tredjepartssamlingsbiblioteker, herunder Google Guava, Apache Commons Collections og Eclipse Collections for bare at nævne nogle få.

Disse biblioteker giver praktiske hjælpemetoder til at initialisere samlinger som Set. Siden Google Guava er en af ​​de mest anvendte her, vi har et eksempel på det. Guava har praktiske metoder til ændring og uforanderlig Sæt genstande:

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

Tilsvarende har Guava en hjælpeklasse til oprettelse uforanderlig Sæt tilfælde, som vi kan se i eksemplet nedenfor.

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

6. Konklusion

Afslutningsvis så vi flere måder, hvorpå en HashSet kan initialiseres, mens den er konstrueret. Disse tilgange dækker ikke nødvendigvis alle mulige måder på nogen måde. Det var bare et forsøg på at fremvise de mest almindelige måder.

En sådan tilgang, der ikke er dækket her, kunne være at bruge objektbyggeren til at konstruere en Sæt.

Som altid er et kodeeksempel tilgængeligt på GitHub.