Sets kopiëren in Java

1. Overzicht

Simpel gezegd, een Set is een verzameling die geen dubbele elementen bevat. In Java, Set is een interface die het Verzameling koppel.

In deze korte tutorial bespreken we verschillende manieren om sets in Java te kopiëren.

2. Kopieer Constructor

Een manier om een Set is om de kopieerconstructor van een Set implementatie:

Set copy = new HashSet (origineel);

Een kopieerconstructor is een speciaal type constructor die wordt gebruikt om een ​​nieuw object te maken door een bestaand object te kopiëren.

Hier klonen we niet echt de elementen van de gegeven set. We kopiëren gewoon de objectreferenties naar de nieuwe set. Om die reden heeft elke wijziging die in één element wordt aangebracht, invloed op beide sets.

3. Set.addAll

De Set interface heeft een Voeg alles toe methode. Het voegt de elementen in de collectie toe aan de doelset. Daarom kunnen we de Voeg alles toe methode om de elementen van een bestaande set naar een lege set te kopiëren:

Set copy = new HashSet (); copy.addAll (origineel);

4. Set. Kloon

Laten we daar rekening mee houden Set is een interface die het Verzameling interface dus we moeten verwijzen naar een object dat de Set interface om een ​​ander exemplaar van een Set.HashSet, TreeSet, LinkedHashSet, en EnumSet zijn allemaal voorbeelden van Set implementaties in Java.

Al deze Set implementaties hebben een kloonmethode omdat ze allemaal het Te klonen koppel.

Dus, als een andere benadering om een ​​set te kopiëren, kunnen we de set's noemen kloon methode:

Set copy = (Set) original.clone ();

Laten we ook opmerken dat klonen oorspronkelijk afkomstig is van de Object. Kloon. Set implementaties overschrijven de kloon methode van de Voorwerp klasse. De aard van de kloon hangt af van de daadwerkelijke implementatie. Bijvoorbeeld, HashSet maakt slechts een ondiepe kopie, hoewel we onze weg kunnen coderen om een ​​diepe kopie te maken.

Zoals we kunnen zien, zijn we gedwongen om het gekloonde object naar te typen Set sinds de kloon methode retourneert eigenlijk een Voorwerp.

5. JSON

Een andere manier om een ​​set te kopiëren, is door deze te serialiseren in een JSON-tekenreeks en maak een nieuwe set van het gegenereerde JSON-tekenreeks. Het is ook de moeite waard om dat op te merken voor deze benadering moeten alle elementen in de set en de elementen waarnaar wordt verwezen serialiseerbaar zijn en dat we maken een diepe kopie van alle objecten.

In dit voorbeeld kopiëren we de set met behulp van de serialiserings- en deserialisatiemethoden van Google's Gson bibliotheek:

Gson gson = nieuwe Gson (); String jsonStr = gson.toJson (origineel); Set copy = gson.fromJson (jsonStr, Set.class);

6. Apache Commons Lang

Apache Commons Lang heeft een klas SerializationUtils dat biedt een speciale methode - kloon - dat kan worden gebruikt om een ​​bepaald object te klonen. We kunnen deze methode gebruiken om een ​​set te kopiëren:

voor (T-item: origineel) {copy.add (SerializationUtils.clone (item)); }

Laten we dat opmerken SerializationUtils.clone verwacht dat zijn parameter de extensie Serialiseerbaar klasse.

7. Collectors.toSet

Of we kunnen Java 8's gebruiken Stroom API met Verzamelaars een set klonen:

Set copy = original.stream () .collect (Collectors.toSet ());

Een voordeel van de Stream API is dat het meer gemak biedt doordat we skips, filters en meer kunnen gebruiken.

8. Java 10 gebruiken

Java 10 brengt een nieuwe functie in het Set interface dat stelt ons in staat om een ​​onveranderlijke set te maken van de elementen van een bepaalde verzameling:

Set copy = Set.copyOf (origineel);

Let daar op Set.copyOf verwacht een niet-nul parameter.

9. Conclusie

In dit artikel hebben we verschillende manieren onderzocht om sets in Java te kopiëren.

Bekijk zoals altijd de broncode voor onze voorbeelden, inclusief die voor Java 10.