Kopieren von Sets in Java

1. Übersicht

Einfach ausgedrückt ist ein Set eine Sammlung, die keine doppelten Elemente enthält. In Java ist Set eine Schnittstelle, die die Collection- Schnittstelle erweitert.

In diesem kurzen Tutorial werden wir verschiedene Möglichkeiten zum Kopieren von Sets in Java durchgehen.

2. Kopieren Sie den Konstruktor

Eine Möglichkeit zum Kopieren eines Sets besteht darin, den Kopierkonstruktor einer Set- Implementierung zu verwenden:

Set copy = new HashSet(original);

Ein Kopierkonstruktor ist ein spezieller Konstruktortyp, mit dem ein neues Objekt durch Kopieren eines vorhandenen Objekts erstellt wird.

Hier klonen wir die Elemente des gegebenen Sets nicht wirklich. Wir kopieren nur die Objektreferenzen in den neuen Satz. Aus diesem Grund wirkt sich jede in einem Element vorgenommene Änderung auf beide Sätze aus.

3. Set.addAll

Die Set- Schnittstelle verfügt über eine addAll- Methode . Es fügt die Elemente in der Sammlung dem Zielsatz hinzu. Daher können wir die addAll- Methode verwenden, um die Elemente eines vorhandenen Satzes in einen leeren Satz zu kopieren:

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

4. Set.clone

Beachten Sie, dass Set eine Schnittstelle ist, die die Collection- Schnittstelle erweitert. Daher müssen wir auf ein Objekt verweisen, das die Set- Schnittstelle implementiert , um eine weitere Instanz eines Sets zu erstellen . HashSet , TreeSet , LinkedHashSet und EnumSet sind Beispiele für Set- Implementierungen in Java.

Alle diese Set- Implementierungen verfügen über eine Klonmethode , da sie alle die klonbare Schnittstelle implementieren .

So, wie ein anderer Ansatz einen Satz zu kopieren, können wir das den Satz nennen Klon - Methode:

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

Beachten Sie auch, dass das Klonen ursprünglich aus dem Object.clone stammt . Set-Implementierungen überschreiben die Klonmethode der Object- Klasse. Die Art des Klons hängt von der tatsächlichen Implementierung ab. Zum Beispiel macht HashSet nur eine flache Kopie, obwohl wir unseren Weg zu einer tiefen Kopie codieren können.

Wie wir sehen können, müssen wir das geklonte Objekt in Set typisieren, da die Klonmethode tatsächlich ein Objekt zurückgibt .

5. JSON

Ein anderer Ansatz zum Kopieren eines Satzes besteht darin, ihn in einen JSON-String zu serialisieren und aus dem generierten JSON-String einen neuen Satz zu erstellen . Es ist auch erwähnenswert, dass für diesen Ansatz alle Elemente in der Menge und die referenzierten Elemente serialisierbar sein müssen und dass wir eine tiefe Kopie aller Objekte durchführen werden .

In diesem Beispiel kopieren wir den Satz mithilfe der Serialisierungs- und Deserialisierungsmethoden der Google Gson- Bibliothek:

Gson gson = new Gson(); String jsonStr = gson.toJson(original); Set copy = gson.fromJson(jsonStr, Set.class);

6. Apache Commons Lang

Apache Commons Lang verfügt über eine Klasse SerializationUtils , die eine spezielle Methode - Klon - bereitstellt , mit der ein bestimmtes Objekt geklont werden kann. Wir können diese Methode verwenden, um einen Satz zu kopieren:

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

Beachten Sie, dass SerializationUtils.clone erwartet , dass sein Parameter die Serializable- Klasse erweitert .

7. Collectors.toSet

Oder wir können die Stream- API von Java 8 mit Collectors verwenden , um einen Satz zu klonen:

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

Ein Vorteil der Stream-API besteht darin, dass sie mehr Komfort bietet, da sie die Verwendung von Sprüngen, Filtern und mehr ermöglicht.

8. Verwenden von Java 10

Java 10 bringt eine neue Funktion in die Set- Oberfläche, mit der wir aus den Elementen einer bestimmten Sammlung eine unveränderliche Menge erstellen können :

Set copy = Set.copyOf(original);

Beachten Sie, dass Set.copyOf einen Parameter ungleich Null erwartet .

9. Fazit

In diesem Artikel haben wir verschiedene Möglichkeiten zum Kopieren von Sets in Java untersucht.

Schauen Sie sich wie immer den Quellcode für unsere Beispiele an, einschließlich des für Java 10.