Javíthatatlan készlet Java-ban

1. Bemutatkozás

Ebben az oktatóanyagban megvizsgáljuk a Java megváltoztathatatlan halmazának elkészítésének különféle módjait.

Először azonban értsük meg a változhatatlan halmazt, és nézzük meg, miért van rá szükségünk.

2. Mi az a megváltoztathatatlan készlet?

Általánosságban, egy megváltoztathatatlan objektum nem változtatja meg a belső állapotát, miután létrehoztuk. Ez alapértelmezés szerint szálbiztos. Ugyanez a logika érvényes a változhatatlan halmazokra is.

Tegyük fel, hogy van egy HashSet például néhány értékkel. Ha megváltoztathatatlanná teszi, készségünk „csak olvasható” változatát hozza létre. Így, az állam állapotának módosítására tett bármely kísérlet megdönti UnsupportedOperationException.

Szóval, miért van rá szükségünk?

Természetesen a megváltoztathatatlan halmaz leggyakoribb használati esete egy többszálas környezet. Tehát megváltoztathatatlan adatokat oszthatunk meg az összes szálon anélkül, hogy aggódnunk kellene a szinkronizálás miatt.

Eközben egy fontos szempontot kell szem előtt tartani: a változtathatatlanság csak a halmazra vonatkozik, és nem az elemeire. Továbbá problémamentesen módosíthatjuk a halmazelemek példányhivatkozásait.

3. Hozzon létre megváltoztathatatlan halmazokat a Java Java-ban

Csak a Java alaposztályok állnak rendelkezésünkre, használhatjuk a Gyűjtemények.unmodifiableSet () módszer az eredeti csomagolására Készlet.

Először hozzunk létre egy egyszerű HashSet példány és inicializálja Húr értékek:

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

Ezután zárjuk be Gyűjtemények.unmodifiableSet ():

Set unmodifiableSet = Collections.unmodifiableSet (set);

Végül, hogy megbizonyosodjon róla unmodifiableSet példány változhatatlan, hozzunk létre egy egyszerű tesztesetet:

@Test (várható = UnsupportedOperationException.class) public void testUnmodifiableSet () {// a set példány létrehozása és inicializálása Set unmodifiableSet = Collections.unmodifiableSet (set); unmodifiableSet.add ("Costa Rica"); }

Ahogy arra számítunk, a teszt sikeresen fog futni. Továbbá a add () művelet tilos a módosíthatatlanSet például és dobni fog UnsupportedOperationException.

Most változtassuk meg a kezdőbetűt készlet például ugyanazt az értéket hozzáadva:

set.add ("Costa Rica");

Így közvetve módosítjuk a módosíthatatlan halmazt. Tehát, amikor kinyomtatjuk a unmodifiableSet példa:

[Kanada, USA, Costa Rica]

Mint láthatjuk, a "Costa Rica" elem is jelen van unmodifiableSet.

4. Hozzon létre megváltoztathatatlan halmazokat a Java 9-ben

A Java 9 óta a Set.of (elements) statikus gyári módszer áll rendelkezésre megváltoztathatatlan halmazok létrehozására:

Beállíthatatlan = Set.of ("Kanada", "USA");

5. Hozzon létre megváltoztathatatlan halmazokat Guava-ban

A megváltoztathatatlan halmaz elkészítésének másik módja a Guava's használata ImmutableSet osztály. A meglévő adatokat egy új, megváltoztathatatlan példányba másolja. Ennek eredményeként a benne lévő adatok ImmutableSet nem változik, ha megváltoztatjuk az eredetit Készlet.

A Java alapvető implementációihoz hasonlóan a létrehozott megváltoztathatatlan példány módosítására irányuló minden kísérlet eldobja UnsupportedOperationException.

Most vizsgáljuk meg a változhatatlan példányok létrehozásának különböző módjait.

5.1. Használata ImmutableSet.másolata()

Egyszerűen fogalmazva: ImmutableSet.másolata() metódus a halmaz összes elemének másolatát adja vissza:

Set immutable = ImmutableSet.copyOf (set);

Tehát a kezdeti halmaz megváltoztatása után a megváltoztathatatlan példány ugyanaz marad:

[Kanada, USA]

5.2. Használata ImmutableSet.nak,-nek()

Hasonlóképpen a ImmutableSet.of () módszerrel azonnal létrehozhatunk egy megváltoztathatatlan halmazt a megadott értékekkel:

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

Ha nem adunk meg elemeket, akkor a ImmutableSet.of () üres megváltoztathatatlan halmazt ad vissza.

Ez összehasonlítható a Java 9-kel Készlet.nak,-nek().

6. Következtetés

Ebben a gyors cikkben megváltoztathatatlant tárgyaltunk Készletek Java nyelven. Sőt, megmutattuk, hogyan lehet megváltoztathatatlanul létrehozni Készletek a Java API, a Java 9 és a Guava könyvtár gyűjteményeinek API-jával.

Végül, mint általában, a cikk teljes kódja elérhető a GitHubon.