Készletek másolása Java-ban

1. Áttekintés

Egyszerűen fogalmazva: a Készlet olyan gyűjtemény, amely nem tartalmaz ismétlődő elemeket. Java-ban Készlet olyan felület, amely kiterjeszti a Gyűjtemény felület.

Ebben a gyors bemutatóban a Java-készletek másolásának különböző módjait fogjuk megismerni.

2. Copy Constructor

A másolás egyik módja a Készlet az a másolat-készítőjének használata Készlet végrehajtás:

Set copy = új HashSet (eredeti);

A másoló konstruktor egy speciális típusú konstruktor, amelyet új objektum létrehozására használnak egy meglévő objektum másolásával.

Itt nem igazán klónozzuk az adott halmaz elemeit. Csak átmásoljuk az objektum hivatkozásokat az új halmazba. Ezért minden elemben végrehajtott minden változás mindkét halmazt befolyásolja.

3. Set.addAll

A Készlet interfész rendelkezik egy az összes hozzáadása módszer. Hozzáadja a gyűjtemény elemeit a célkészlethez. Ezért használhatjuk a az összes hozzáadása módszer egy meglévő halmaz elemeinek üres halmazba másolásához:

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

4. Set.klón

Ezt tartsuk szem előtt Készlet olyan felület, amely kiterjeszti a Gyűjtemény interfész tehát utalnunk kell egy objektumra, amely megvalósítja a Készlet felület egy másik példányának létrehozásához Készlet.HashSet, TreeSet, LinkedHashSet, és EnumSet mind példák Készlet implementációk Java-ban.

Mindezek Készlet megvalósítások klón módszerrel rendelkeznek, mivel mindegyikük megvalósítja a Klónozható felület.

Tehát a készlet másolásának másik megközelítéseként hívhatjuk a készleteket klón módszer:

Set copy = (Beállítás) eredeti.klón ();

Megjegyezzük azt is, hogy a klónozás eredetileg a Object.klón. A beállított implementációk felülbírálják a klón módszere Tárgy osztály. A klón jellege a tényleges megvalósítástól függ. Például, HashSet csak sekély példányt végez, bár kódolhatjuk a mély másolat elkészítésének módját.

Mint láthatjuk, kénytelenek vagyunk a klónozott objektumot tipusba küldeni Készlet mivel a klón metódus valójában egy Tárgy.

5. JSON

A halmaz másolásának másik megközelítése az, hogy sorosítja a JSON húr és hozzon létre egy új készletet a létrehozottból JSON húr. Érdemes ezt is megjegyezni ehhez a megközelítéshez a halmaz és a hivatkozott elemek összes elemének sorosíthatónak kell lennie és az elvégezzük az összes objektum mély másolatát.

Ebben a példában a készletet a Google sorosítási és deserializációs módszereivel másoljuk Gson könyvtár:

Gson gson = új Gson (); Karakterlánc jsonStr = gson.toJson (eredeti); Set copy = gson.fromJson (jsonStr, Set.class);

6. Apache Commons Lang

Az Apache Commons Lang osztálya van SerializationUtils amely egy speciális módszert biztosít - klón - amellyel egy adott tárgy klónozható. Ezt a módszert használhatjuk egy készlet másolásához:

for (T elem: eredeti) {copy.add (SerializationUtils.clone (elem)); }

Ezt jegyezzük meg SerializationUtils.clone arra számít, hogy paramétere kiterjeszti a Sorosítható osztály.

7. Collectors.toSet

Vagy használhatunk Java 8-kat is Folyam API-val Gyűjtők készlet klónozásához:

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

Az egyik előnye a Stream API az, hogy nagyobb kényelmet nyújt azáltal, hogy lehetővé teszi számunkra az átugrások, szűrők és egyebek használatát.

8. A Java 10 használata

A Java 10 új funkciót hoz létre a Készlet interfész, hogy lehetővé teszi számunkra, hogy egy adott gyűjtemény elemeiből változhatatlan halmazt hozzunk létre:

Set copy = Set.copyOf (eredeti);

Vegye figyelembe, hogy Set.copyOf arra számít, hogy nemnulla paraméter.

9. Következtetés

Ebben a cikkben a Java-készletek másolásának különböző módjait tártuk fel.

Mint mindig, nézze meg példáink forráskódját, beleértve a Java 10-et is.