Menyalin Set di Java

1. Gambaran keseluruhan

Secara sederhana, Set adalah koleksi yang tidak mengandungi unsur pendua. Di Java, Set adalah antara muka yang memperluas antara muka Koleksi .

Dalam tutorial ringkas ini, kita akan melalui pelbagai cara menyalin set di Java.

2. Salin Pembina

Salah satu cara menyalin Set adalah dengan menggunakan penyusun salinan pelaksanaan Set :

Set copy = new HashSet(original);

Salin konstruktor adalah jenis konstruktor khas yang digunakan untuk membuat objek baru dengan menyalin objek yang ada.

Di sini, kita tidak benar-benar mengklon elemen-elemen dari set yang diberikan. Kami hanya menyalin rujukan objek ke dalam set baru. Untuk itu, setiap perubahan yang dibuat dalam satu elemen akan mempengaruhi kedua-dua set.

3. Set.addAll

Antara muka Set mempunyai kaedah addAll . Ia menambahkan elemen dalam koleksi ke sasaran yang ditetapkan. Oleh itu, kita boleh menggunakan kaedah addAll untuk menyalin elemen set yang ada ke set kosong:

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

4. Set.clone

Perlu diingat bahawa Set adalah antara muka yang memperluas antara muka Koleksi , oleh itu kita perlu merujuk pada objek yang mengimplementasikan antara muka Set untuk membuat contoh Set yang lain . HashSet , TreeSet , LinkedHashSet, dan EnumSet adalah semua contoh pelaksanaan Set di Java.

Semua implementasi Set ini mempunyai kaedah klon kerana semuanya menerapkan antara muka Cloneable .

Oleh itu, sebagai pendekatan lain untuk menyalin satu set, kita boleh memanggil kaedah klon set :

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

Mari kita perhatikan bahawa pengklonan pada asalnya berasal dari Object.clone . Set implementasi mengatasi kaedah klon kelas Objek . Sifat klon bergantung pada pelaksanaan sebenarnya. Sebagai contoh, HashSet hanya membuat salinan cetek, walaupun kita dapat membuat kod cara untuk membuat salinan mendalam.

Seperti yang kita dapat lihat, kita terpaksa cuma sesuai objek diklon untuk Set sejak yang klon kaedah sebenarnya mengembalikan Objek .

5. JSON

Pendekatan lain untuk menyalin satu set adalah menyusunnya menjadi JSON String dan membuat set baru dari JSON String yang dihasilkan . Perlu juga diperhatikan bahawa untuk pendekatan ini semua elemen dalam kumpulan dan elemen yang dirujuk mesti diselaraskan dan kami akan melakukan salinan mendalam dari semua objek .

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

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

6. Apache Commons Lang

Apache Commons Lang mempunyai kelas SerializationUtils yang menyediakan kaedah khas - klon - yang dapat digunakan untuk mengklon objek tertentu. Kita boleh menggunakan kaedah ini untuk menyalin satu set:

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

Mari kita perhatikan bahawa SerializationUtils.clone mengharapkan parameternya untuk melanjutkan kelas Serializable .

7. Pengumpul.toSet

Atau, kita dapat menggunakan API Stream Java 8 dengan Kolektor untuk mengklon satu set:

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

Satu kelebihan API Aliran ialah ia memberikan lebih banyak kemudahan dengan membolehkan kami menggunakan langkau, penapis, dan banyak lagi.

8. Menggunakan Java 10

Java 10 membawa fitur baru ke antara muka Set yang memungkinkan kita membuat set yang tidak berubah dari elemen koleksi tertentu :

Set copy = Set.copyOf(original);

Perhatikan bahawa Set.copyOf mengharapkan parameter tidak nol .

9. Kesimpulannya

Dalam artikel ini, kami telah meneroka pelbagai cara menyalin set di Java.

Seperti biasa, periksa kod sumber untuk contoh kami, termasuk kod untuk Java 10.