Onveranderlijke set in Java

1. Inleiding

In deze tutorial we gaan kijken naar verschillende manieren om een ​​onveranderlijke set in Java te construeren.

Maar laten we eerst de onveranderlijke set begrijpen en kijken waarom we het nodig hebben.

2. Wat is een onveranderlijke set?

Over het algemeen, een onveranderlijk object zal zijn interne toestand niet veranderen als we het eenmaal hebben gemaakt. Dit maakt het standaard thread-safe. Dezelfde logica is van toepassing op onveranderlijke sets.

Stel dat we een HashSet instantie met enkele waarden. Door het onveranderlijk te maken, ontstaat er een "alleen-lezen" versie van onze set. Dus, elke poging om zijn staat te wijzigen zal gooien UnsupportedOperationException.

Dus waarom hebben we het nodig?

De meest voorkomende use-case van een onveranderlijke set is zeker een omgeving met meerdere threads. We kunnen dus onveranderlijke gegevens over de threads heen delen zonder ons zorgen te hoeven maken over de synchronisatie.

Ondertussen is er een belangrijk punt om in gedachten te houden: onveranderlijkheid heeft alleen betrekking op de verzameling en niet op de elementen ervan. Bovendien kunnen we de instantiereferenties van de set-elementen probleemloos wijzigen.

3. Maak onveranderlijke sets in Core Java

Met alleen de kern Java-klassen tot onze beschikking, kunnen we de Collecties.unmodifiableSet () methode om het origineel in te pakken Set.

Laten we eerst een simple maken HashSet instantie en initialiseer het met Draad waarden:

Set set = new HashSet (); set.add ("Canada"); set.add ("VS");

Laten we het vervolgens afronden met Collecties.unmodifiableSet ():

Set unmodifiableSet = Collections.unmodifiableSet (set);

Eindelijk, om ervoor te zorgen dat onze unmodifiableSet instantie is onveranderlijk, laten we een eenvoudige testcase maken:

@Test (verwacht = UnsupportedOperationException.class) public void testUnmodifiableSet () {// maak en initialiseer de ingestelde instantie Set unmodifiableSet = Collections.unmodifiableSet (set); unmodifiableSet.add ("Costa Rica"); }

Zoals we verwachten, zal de test met succes worden uitgevoerd. Bovendien is de toevoegen() werking is verboden op de unmodifiableSet instantie en zal gooien UnsupportedOperationException.

Laten we nu de initiaal veranderen set bijvoorbeeld door er dezelfde waarde aan toe te voegen:

set.add ("Costa Rica");

Op deze manier wijzigen we indirect de niet-wijzigbare set. Dus als we het unmodifiableSet voorbeeld:

[Canada, VS, Costa Rica]

Zoals we kunnen zien, is de "Costa Rica" item is ook aanwezig in unmodifiableSet.

4. Maak onveranderlijke sets in Java 9

Sinds Java 9 is het Set.of (elementen) statische fabrieksmethode is beschikbaar voor het maken van onveranderlijke sets:

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

5. Creëer onveranderlijke sets in Guava

Een andere manier waarop we een onveranderlijke set kunnen construeren, is door Guava's te gebruiken Onveranderlijk ingesteld klasse. Het kopieert de bestaande gegevens naar een nieuwe onveranderlijke instantie. Als gevolg hiervan komen de gegevens binnen Onveranderlijk ingesteld zal niet veranderen als we het origineel veranderen Set.

Net als de kern-Java-implementatie, zal elke poging om de gemaakte onveranderlijke instantie te wijzigen UnsupportedOperationException.

Laten we nu verschillende manieren onderzoeken om onveranderlijke instanties te creëren.

5.1. Gebruik makend van Onveranderlijk ingesteld.kopie van()

Simpel gezegd, de Onveranderlijk ingesteld.kopie van() methode retourneert een kopie van alle elementen in de set:

Set immutable = ImmutableSet.copyOf (set);

Dus na het wijzigen van de initiële set, blijft de onveranderlijke instantie hetzelfde:

[Canada, VS]

5.2. Gebruik makend van Onveranderlijk ingesteld.van()

Evenzo met de ImmutableSet.of () methode kunnen we direct een onveranderlijke set maken met de gegeven waarden:

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

Als we geen elementen specificeren, is de ImmutableSet.of () zal een lege onveranderlijke set teruggeven.

Dit kan worden vergeleken met Java 9's Set.van().

6. Conclusie

In dit korte artikel bespraken we onveranderlijk Sets in de Java-taal. Bovendien hebben we laten zien hoe je onveranderlijk kunt creëren Sets met behulp van de Collections API van core Java, Java 9 en de Guava-bibliotheek.

Eindelijk, zoals gewoonlijk, is de volledige code voor dit artikel beschikbaar op GitHub.


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