Kopiranje skupova na Javi

1. Pregled

Jednostavno rečeno, a Postavi je zbirka koja ne sadrži ponovljene elemente. U Javi, Postavi je sučelje koje proširuje Kolekcija sučelje.

U ovom brzom vodiču proći ćemo kroz različite načine kopiranja skupova u Javi.

2. Konstruktor kopija

Jedan od načina kopiranja a Postavi je korištenje konstruktora kopiranja a Postavi provedba:

Postavi kopiju = novi HashSet (izvornik);

Konstruktor kopiranja je posebna vrsta konstruktora koji se koristi za stvaranje novog objekta kopiranjem postojećeg objekta.

Ovdje zapravo ne kloniramo elemente zadanog skupa. Samo kopiramo reference na objekt u novi skup. Iz tog će razloga svaka promjena izvršena u jednom elementu utjecati na oba skupa.

3. Set.addAll

The Postavi sučelje ima Dodaj Sve metoda. Dodaje elemente u zbirci ciljnom skupu. Stoga možemo koristiti Dodaj Sve metoda za kopiranje elemenata postojećeg skupa u prazan skup:

Postavi kopiju = novi HashSet (); copy.addAll (izvornik);

4. Set.clone

Imajmo to na umu Postavi je sučelje koje proširuje Kolekcija sučelje, dakle moramo se odnositi na objekt koji implementira Postavi sučelje za stvaranje još jedne instance a Postavi.HashSet, TreeSet, LinkedHashSet, i EnumSet su svi primjeri Postavi implementacije u Javi.

Svi ovi Postavi implementacije imaju metodu klona jer sve implementiraju Klonirajući sučelje.

Dakle, kao još jedan pristup kopiranju skupa, možemo ih nazvati klon metoda:

Postavi kopiju = (Postavi) original.clone ();

Napomenimo također da kloniranje izvorno dolazi iz Object.clone. Postavke implementacija nadjačavaju klon metoda Objekt razred. Priroda klona ovisi o stvarnoj provedbi. Na primjer, HashSet radi samo plitku kopiju, iako možemo kodirati svoj način da napravimo dubinsku kopiju.

Kao što vidimo, prisiljeni smo preslikati klonirani objekt Postavi od the klon metoda zapravo vraća Objekt.

5. JSON

Drugi pristup kopiranju skupa je serializacija u JSON niz i stvorite novi skup od generiranog JSON niz. To je također vrijedno napomenuti za ovaj pristup svi elementi u skupu i referencirani elementi moraju biti serializirani i to izvest ćemo dubinsku kopiju svih predmeta.

U ovom ćemo primjeru kopirati skup upotrebom Googleovih metoda serializacije i deserializacije Gson knjižnica:

Gson gson = novi Gson (); Niz jsonStr = gson.toJson (izvornik); Postavi kopiju = gson.fromJson (jsonStr, Set.class);

6. Apache Commons Lang

Apache Commons Lang ima klasu Korištenje serializacije koja pruža posebnu metodu - klon - koji se može koristiti za kloniranje određenog objekta. Ovu metodu možemo iskoristiti za kopiranje skupa:

za (T stavka: izvornik) {copy.add (SerializationUtils.clone (stavka)); }

Napomenimo to SerializationUtils.clone očekuje da će se njegov parametar proširiti Serijalizirati razred.

7. Kolekcionari.toSet

Ili, možemo koristiti Javu 8 Stream API sa Kolekcionari za kloniranje skupa:

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

Jedna od prednosti Stream API jest da pruža veću praktičnost dopuštajući nam upotrebu preskoka, filtara i još mnogo toga.

8. Korištenje Jave 10

Java 10 donosi novu značajku u Postavi sučelje koje omogućuje nam stvaranje nepromjenjivog skupa od elemenata zadane zbirke:

Postavi kopiju = Set.copyOf (original);

Imajte na umu da Set.copyOf očekuje ne-null parametar.

9. Zaključak

U ovom smo članku istražili različite načine kopiranja skupova u Javi.

Kao i uvijek, pogledajte izvorni kod za naše primjere, uključujući onaj za Javu 10.