Nemenná sada v Jave

1. Úvod

V tomto návode ideme sa pozrieť na rôzne spôsoby konštrukcie nemennej množiny v Jave.

Najprv však pochopme nemennú množinu a pozrime sa, prečo ju potrebujeme.

2. Čo je to nemenná množina?

Všeobecne, nemenný objekt nezmení svoj vnútorný stav, akonáhle ho vytvoríme. Vďaka tomu je v predvolenom nastavení bezpečný pre vlákna. Rovnaká logika platí aj pre nemenné sady.

Predpokladajme, že máme a HashSet napríklad s niektorými hodnotami. Ak ho urobíte nemenným, vytvorí sa naša sada „iba na čítanie“. Teda akýkoľvek pokus o zmenu jeho stavu vyvolá UnsupportedOperationException.

Prečo to teda potrebujeme?

Najbežnejším prípadom použitia nemennej množiny je určite prostredie s viacerými vláknami. Môžeme teda zdieľať nemenné dáta naprieč vláknami bez obáv zo synchronizácie.

Je potrebné mať na pamäti dôležitý bod: nemennosť sa týka iba množiny a nie jej prvkov. Ďalej môžeme bez problémov upravovať odkazy na inštancie prvkov množiny.

3. Vytvorte nemenné sady v Core Java

Ak máme k dispozícii iba základné triedy Java, môžeme používať Zbierky.unmodifiableSet () spôsob zabalenia originálu Nastaviť.

Najprv si vytvorme jednoduchý HashSet inštanciu a inicializujte ju pomocou String hodnoty:

Set set = new HashSet (); set.add ("Kanada"); set.add ("USA");

Ďalej to zabalíme Zbierky.unmodifiableSet ():

Set unmodifiableSet = Collections.unmodifiableSet (sada);

Nakoniec sa uistite, že unmodifiableSet inštancia je nemenná, vytvorme jednoduchý testovací prípad:

@Test (očakáva sa = UnsupportedOperationException.class) public void testUnmodifiableSet () {// vytvorí a inicializuje nastavenú inštanciu Set unmodifiableSet = Collections.unmodifiableSet (sada); unmodifiableSet.add ("Kostarika"); }

Ako očakávame, test prebehne úspešne. Ďalej pridať () prevádzka je zakázaná dňa zostava nemodifikovateľná inštancie a bude hádzať UnsupportedOperationException.

Teraz zmeňme začiatočné nastaviť napríklad pridaním rovnakej hodnoty:

set.add ("Kostarika");

Týmto spôsobom nepriamo upravíme nemodifikovateľnú množinu. Keď teda tlačíme unmodifiableSet inštancia:

[Kanada, USA, Kostarika]

Ako vidíme, „Kostarika“ položka je tiež prítomná v unmodifiableSet.

4. Vytvorte nemenné sady v prostredí Java 9

Od verzie Java 9 sa Sada (prvkov) na vytváranie nemenných množín je k dispozícii statická továrenská metóda:

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

5. Vytvorte nemenné sady na Guave

Ďalším spôsobom, ako môžeme zostaviť nemennú množinu, je použitie Guava ImmutableSet trieda. Skopíruje existujúce údaje do novej nemennej inštancie. Výsledkom je, že údaje vo vnútri ImmutableSet sa nezmení, keď zmeníme originál Nastaviť.

Rovnako ako hlavná implementácia Java, akýkoľvek pokus o úpravu vytvorenej nemennej inštancie vyvolá pokus UnsupportedOperationException.

Poďme teraz preskúmať rôzne spôsoby vytvárania nemenných inštancií.

5.1. Použitím ImmutableSet.kópia()

Jednoducho povedané ImmutableSet.kópia() metóda vráti kópiu všetkých prvkov v množine:

Set immutable = ImmutableSet.copyOf (set);

Takže po zmene počiatočnej množiny zostane nemenná inštancia rovnaká:

[Kanada, USA]

5.2. Použitím ImmutableSet.of ()

Podobne s ImmutableSet.of () metódou môžeme okamžite vytvoriť nemennú množinu s danými hodnotami:

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

Keď neurčíme žiadne prvky, znak ImmutableSet.of () vráti prázdnu nemennú sadu.

To sa dá porovnať s Java 9 Nastaviť.of ().

6. Záver

V tomto rýchlom článku sme diskutovali o nemennom Sady v jazyku Java. Navyše sme si ukázali, ako vytvoriť nemenné Sady pomocou API API pre zbierky z jadra Java, Java 9 a knižnice Guava.

Nakoniec je ako obvykle kompletný kód tohto článku k dispozícii na GitHub.


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