Menyalin Set di Java

1. Ikhtisar

Sederhananya, Set adalah koleksi yang tidak berisi elemen duplikat. Di Java, Set adalah antarmuka yang memperluas antarmuka Koleksi .

Dalam tutorial singkat ini, kita akan membahas berbagai cara menyalin set di Java.

2. Salin Pembuat

Salah satu cara menyalin Set adalah menggunakan konstruktor salinan dari implementasi Set :

Set copy = new HashSet(original);

Konstruktor salinan adalah jenis konstruktor khusus yang digunakan untuk membuat objek baru dengan menyalin objek yang sudah ada.

Di sini, kami tidak benar-benar mengkloning elemen dari set yang diberikan. Kami hanya menyalin referensi objek ke set baru. Oleh karena itu, setiap perubahan yang dilakukan dalam satu elemen akan memengaruhi kedua set.

3. Set.addAll

The Set antarmuka memiliki addAll metode . Ini menambahkan elemen dalam koleksi ke set target. Oleh karena itu, kita dapat menggunakan metode addAll untuk menyalin elemen dari himpunan yang ada ke himpunan kosong:

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

4. Set.clone

Ingatlah bahwa Set adalah antarmuka yang memperluas antarmuka Collection , oleh karena itu kita perlu merujuk ke objek yang mengimplementasikan antarmuka Set untuk membuat instance lain dari Set . HashSet , TreeSet , LinkedHashSet, dan EnumSet adalah contoh implementasi Set di Java.

Semua implementasi Set ini memiliki metode clone karena semuanya mengimplementasikan antarmuka Cloneable .

Jadi, sebagai pendekatan lain untuk menyalin satu set, kita bisa memanggil metode klon set :

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

Perhatikan juga bahwa kloning awalnya berasal dari Object.clone . Set implementasi menggantikan metode klon kelas Object . Sifat klon bergantung pada implementasi sebenarnya. Misalnya, HashSet hanya melakukan salinan dangkal, meskipun kita dapat membuat kode untuk melakukan salinan dalam.

Seperti yang kita lihat, kita dipaksa untuk typecast objek kloning untuk Set sejak para clone metode sebenarnya mengembalikan sebuah Object .

5. JSON

Pendekatan lain untuk menyalin set adalah dengan membuat serialisasi menjadi String JSON dan membuat set baru dari String JSON yang dihasilkan . Perlu juga dicatat bahwa untuk pendekatan ini semua elemen dalam set dan elemen yang direferensikan harus dapat diserialkan dan kami akan melakukan salinan mendalam dari semua objek .

Dalam contoh ini, kami akan menyalin set dengan menggunakan metode serialisasi dan deserialisasi pustaka Google Gson :

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

6. Apache Commons Lang

Apache Commons Lang memiliki kelas SerializationUtils yang menyediakan metode khusus - klon - yang dapat digunakan untuk mengkloning objek tertentu. Kita dapat menggunakan metode ini untuk menyalin satu set:

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

Perhatikan bahwa SerializationUtils.clone mengharapkan parameternya untuk memperluas kelas Serializable .

7. Collectors.toSet

Atau, kita dapat menggunakan Stream API Java 8 dengan Kolektor untuk mengkloning kumpulan:

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

Satu keuntungan dari Stream API adalah menyediakan lebih banyak kenyamanan dengan memungkinkan kita menggunakan lompatan, filter, dan lainnya.

8. Menggunakan Java 10

Java 10 menghadirkan fitur baru ke dalam antarmuka Set yang memungkinkan kita membuat set yang tidak dapat diubah dari elemen koleksi tertentu :

Set copy = Set.copyOf(original);

Perhatikan bahwa Set.copyOf mengharapkan parameter bukan null .

9. Kesimpulan

Pada artikel ini, kami telah mempelajari berbagai cara menyalin set di Java.

Seperti biasa, lihat kode sumber untuk contoh kami, termasuk yang untuk Java 10.