Kopieringssett i Java

1. Oversikt

Enkelt sagt, a Sett er en samling som ikke inneholder dupliserte elementer. I Java, Sett er et grensesnitt som utvider Samling grensesnitt.

I denne raske opplæringen vil vi gå gjennom forskjellige måter å kopiere sett på Java.

2. Copy Constructor

En måte å kopiere en Sett er å bruke kopikonstruktøren til en Sett gjennomføring:

Sett kopi = nytt HashSet (original);

En kopikonstruktør er en spesiell type konstruktør som brukes til å lage et nytt objekt ved å kopiere et eksisterende objekt.

Her kloner vi egentlig ikke elementene i det gitte settet. Vi kopierer bare objektreferansene til det nye settet. Av den grunn vil hver endring i ett element påvirke begge settene.

3. Set.addAll

De Sett grensesnittet har et Legg til alle metode. Det legger elementene i samlingen til målesettet. Derfor kan vi bruke Legg til alle metode for å kopiere elementene i et eksisterende sett til et tomt sett:

Sett kopi = ny HashSet (); copy.addAll (original);

4. Set.clone

La oss huske på det Sett er et grensesnitt som utvider Samling grensesnitt, derfor vi må referere til et objekt som implementerer Sett grensesnitt for å opprette en annen forekomst av en Sett.HashSet, TreeSet, LinkedHashSet, og EnumSet er alle eksempler på Sett implementeringer i Java.

Alle disse Sett implementeringer har en klonmetode siden de alle implementerer Klonbar grensesnitt.

Så, som en annen tilnærming til å kopiere et sett, kan vi ringe settets klone metode:

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

La oss også merke at kloning opprinnelig kommer fra Object.clone. Sett implementeringer overstyrer klone metoden for Gjenstand klasse. Klonens natur avhenger av den faktiske implementeringen. For eksempel, HashSet gjør bare en grunne kopi, selv om vi kan kode oss for å lage en dyp kopi.

Som vi kan se, er vi tvunget til å kaste det klonede objektet til Sett siden de klone metoden returnerer faktisk en Gjenstand.

5. JSON

En annen tilnærming til å kopiere et sett er å serieisere det til en JSON String og lage et nytt sett fra den genererte JSON String. Det er også verdt å merke seg det for denne tilnærmingen må alle elementene i settet og refererte elementer være serierbare og det vi skal utføre en dyp kopi av alle gjenstandene.

I dette eksemplet kopierer vi settet ved hjelp av serialiserings- og deserialiseringsmetodene til Google Gson bibliotek:

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

6. Apache Commons Lang

Apache Commons Lang har en klasse SerializationUtils som gir en spesiell metode - klone - som kan brukes til å klone et gitt objekt. Vi kan bruke denne metoden til å kopiere et sett:

for (T-element: original) {copy.add (SerializationUtils.clone (item)); }

La oss merke det SerializationUtils.clone forventer at parameteren utvider Serialiserbar klasse.

7. Collectors.toSet

Eller vi kan bruke Java 8-er Strøm API med Samlere å klone et sett:

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

En fordel med Stream API er at det gir mer bekvemmelighet ved å la oss bruke hopp over, filtre og mer.

8. Bruke Java 10

Java 10 bringer en ny funksjon inn i Sett grensesnitt som lar oss lage et uforanderlig sett fra elementene i en gitt samling:

Sett kopi = Set.copyOf (original);

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

9. Konklusjon

I denne artikkelen har vi utforsket forskjellige måter å kopiere sett på Java.

Som alltid, sjekk kildekoden for eksemplene våre, inkludert den for Java 10.


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