Kopiering af sæt i Java

1. Oversigt

Kort sagt, en Sæt er en samling, der ikke indeholder duplikatelementer. I Java, Sæt er en grænseflade, der udvider Kollektion interface.

I denne hurtige vejledning gennemgår vi forskellige måder at kopiere sæt på Java.

2. Kopi konstruktør

En måde at kopiere en Sæt er at bruge kopikonstruktøren til en Sæt implementering:

Indstil kopi = nyt HashSet (original);

En kopikonstruktør er en speciel type konstruktør, der bruges til at oprette et nyt objekt ved at kopiere et eksisterende objekt.

Her kloner vi ikke rigtig elementerne i det givne sæt. Vi kopierer bare objekthenvisningerne til det nye sæt. Af den grund påvirker hver ændring foretaget i et element begge sæt.

3. Set.addAll

Det Sæt interface har en tilføjAlle metode. Det føjer elementerne i samlingen til målsættet. Derfor kan vi bruge tilføjAlle metode til at kopiere elementerne i et eksisterende sæt til et tomt sæt:

Indstil kopi = nyt HashSet (); copy.addAll (original);

4. Set.clone

Lad os huske det Sæt er en grænseflade, der udvider Kollektion interface, derfor vi skal henvise til et objekt, der implementerer Sæt interface for at oprette en anden forekomst af en Sæt.HashSet, TreeSet, LinkedHashSet, og EnumSet er alle eksempler på Sæt implementeringer i Java.

Alle disse Sæt implementeringer har en klonmetode, da de alle implementerer Klonabel interface.

Så som en anden tilgang til kopiering af et sæt kan vi kalde sættets klon metode:

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

Lad os også bemærke, at kloning oprindeligt kommer fra Object.clone. Indstil implementeringer tilsidesætter klon metode til Objekt klasse. Klonens art afhænger af den faktiske implementering. For eksempel, HashSet laver kun en lav kopi, selvom vi kan kode vores måde at lave en dyb kopi på.

Som vi kan se, er vi tvunget til at udskrive det klonede objekt til Sæt siden det klon metode returnerer faktisk en Objekt.

5. JSON

En anden tilgang til at kopiere et sæt er at serieisere det til en JSON String og opret et nyt sæt fra det genererede JSON String. Det er også værd at bemærke det til denne tilgang skal alle elementerne i sættet og de refererede elementer være serierbare og det vi udfører en dyb kopi af alle objekterne.

I dette eksempel kopierer vi sættet ved hjælp af Googles serialiserings- og deserialiseringsmetoder Gson bibliotek:

Gson gson = ny Gson (); Streng jsonStr = gson.toJson (original); Sæt kopi = gson.fromJson (jsonStr, Set.class);

6. Apache Commons Lang

Apache Commons Lang har en klasse SerializationUtils der giver en særlig metode - klon - der kan bruges til at klone et givet objekt. Vi kan bruge denne metode til at kopiere et sæt:

til (T-vare: original) {copy.add (SerializationUtils.clone (item)); }

Lad os bemærke det SerializationUtils.clone forventer, at dens parameter udvider Serialiserbar klasse.

7. Collectors.toSet

Eller vi kan bruge Java 8'er Strøm API med Samlere at klone et sæt:

Indstil kopi = original.stream () .collect (Collectors.toSet ());

En fordel ved Stream API er, at det giver mere bekvemmelighed ved at tillade os at bruge spring, filtre og mere.

8. Brug af Java 10

Java 10 bringer en ny funktion ind i Sæt grænseflade, der giver os mulighed for at skabe et uforanderligt sæt ud fra elementerne i en given samling:

Set copy = Set.copyOf (original);

Noter det Set.copyOf forventer en ikke-nul parameter.

9. Konklusion

I denne artikel har vi undersøgt forskellige måder at kopiere sæt på Java.

Som altid, tjek kildekoden til vores eksempler, inklusive den til Java 10.


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