Uforanderligt sæt i Java

1. Introduktion

I denne vejledning vi skal se på forskellige måder at konstruere et uforanderligt sæt på Java.

Men lad os først forstå det uforanderlige sæt og se, hvorfor vi har brug for det.

2. Hvad er et uforanderligt sæt?

Generelt, et uforanderligt objekt ændrer ikke sin interne tilstand, når vi først har oprettet det. Dette gør det trådsikkert som standard. Den samme logik gælder for uforanderlige sæt.

Lad os antage, at vi har en HashSet eksempel med nogle værdier. At gøre det uforanderligt vil skabe en "read-only" version af vores sæt. Dermed, ethvert forsøg på at ændre dets tilstand vil kaste Ikke-understøttetOperationException.

Så hvorfor har vi brug for det?

Bestemt er det mest almindelige anvendelses tilfælde af et uforanderligt sæt et multitrådet miljø. Så vi kan dele uforanderlige data på tværs af trådene uden at bekymre os om synkroniseringen.

I mellemtiden er der et vigtigt punkt at huske på: uforanderlighed vedrører kun sættet og ikke dets elementer. Desuden kan vi ændre forekomstreferencer for sætelementerne uden problemer.

3. Opret uforanderlige sæt i Core Java

Med kun de centrale Java-klasser til vores rådighed kan vi bruge Samlinger.unmodifiableSet () metode til at pakke originalen Sæt.

Lad os først oprette en simpel HashSet instans og initialiser det med Snor værdier:

Sæt sæt = nyt HashSet (); set.add ("Canada"); set.add ("USA");

Lad os derefter afslutte det med Samlinger.unmodifiableSet ():

Set unmodifiableSet = Collections.unmodifiableSet (set);

Endelig for at sikre vores unmodifiableSet eksempel er uforanderlig, lad os oprette en simpel test case:

@Test (forventet = UnsupportedOperationException.class) public void testUnmodifiableSet () {// opret og initialiser den indstillede instans Sæt unmodifiableSet = Collections.unmodifiableSet (sæt); unmodifiableSet.add ("Costa Rica"); }

Som vi forventer, vil testen køre med succes. Desuden er den tilføje() drift er forbudt den det umodificerbare sæt eksempel og vil kaste Ikke-understøttetOperationException.

Lad os nu ændre initialen sæt eksempel ved at tilføje den samme værdi til det:

set.add ("Costa Rica");

På denne måde ændrer vi indirekte det umodificerbare sæt. Så når vi udskriver unmodifiableSet eksempel:

[Canada, USA, Costa Rica]

Som vi kan se, er “Costa Rica” varen er også til stede i unmodifiableSet.

4. Opret uforanderlige sæt i Java 9

Siden Java 9 er den Set.of (elementer) statisk fabriksmetode er tilgængelig til oprettelse af uforanderlige sæt:

Set immutable = Set.of ("Canada", "USA");

5. Opret uforanderlige sæt i Guava

En anden måde, hvorpå vi kan konstruere et uforanderligt sæt, er ved hjælp af guavas ImmutableSet klasse. Det kopierer de eksisterende data til en ny uforanderlig forekomst. Som et resultat, dataene inde ImmutableSet ændres ikke, når vi ændrer originalen Sæt.

Ligesom kernens Java-implementering vil ethvert forsøg på at ændre den oprettede uforanderlige forekomst kaste Ikke-understøttetOperationException.

Lad os nu undersøge forskellige måder at skabe uforanderlige forekomster på.

5.1. Ved brug af ImmutableSet.copyOf ()

Kort sagt, den ImmutableSet.copyOf () metoden returnerer en kopi af alle elementerne i sættet:

Set immutable = ImmutableSet.copyOf (set);

Så efter ændring af det oprindelige sæt forbliver den uforanderlige forekomst den samme:

[Canada, USA]

5.2. Ved brug af ImmutableSet.af()

Tilsvarende med ImmutableSet.of () metode kan vi straks oprette et uforanderligt sæt med de givne værdier:

Set immutable = ImmutableSet.of ("Canada", "USA");

Når vi ikke specificerer nogen elementer, vises ImmutableSet.of () returnerer et tomt uforanderligt sæt.

Dette kan sammenlignes med Java 9'er Sæt.af().

6. Konklusion

I denne hurtige artikel diskuterede vi uforanderlig Sæt på Java-sproget. Desuden viste vi, hvordan man opretter uforanderlig Sæt ved hjælp af Collections API fra core Java, Java 9 og Guava-biblioteket.

Endelig er den komplette kode til denne artikel som sædvanlig tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found