Set yang Tidak Dapat Diubah di Java

1. Perkenalan

Dalam tutorial ini, kita akan melihat berbagai cara untuk membangun set yang tidak dapat diubah di Java.

Tapi pertama-tama, mari pahami himpunan yang tidak berubah dan lihat mengapa kita membutuhkannya.

2. Apakah Himpunan yang Tidak Dapat Diubah itu?

Secara umum, objek yang tidak dapat diubah tidak akan mengubah keadaan internalnya setelah kita membuatnya. Ini membuatnya aman untuk thread secara default. Logika yang sama berlaku untuk set yang tidak dapat diubah.

Misalkan kita memiliki instance HashSet dengan beberapa nilai. Menjadikannya tidak dapat diubah akan membuat versi "hanya-baca" dari set kita. Jadi, setiap upaya untuk mengubah statusnya akan memunculkan UnsupportedOperationException .

Jadi, mengapa kita membutuhkannya?

Tentu saja, kasus penggunaan paling umum dari kumpulan yang tidak dapat diubah adalah lingkungan multi-utas. Jadi, kami dapat membagikan data yang tidak dapat diubah di seluruh utas tanpa mengkhawatirkan sinkronisasi.

Sementara itu, ada hal penting yang perlu diingat: keabadian hanya berkaitan dengan himpunan dan bukan elemennya . Selanjutnya, kita dapat memodifikasi referensi instance dari elemen yang ditetapkan tanpa masalah.

3. Buat Set yang Tidak Dapat Diubah di Core Java

Dengan hanya kelas inti Java yang kami miliki, kami dapat menggunakan Koleksi . unmodifiableSet () untuk membungkus Set asli .

Pertama, mari buat instance HashSet sederhana dan inisialisasi dengan nilai String :

Set set = new HashSet(); set.add("Canada"); set.add("USA");

Selanjutnya, mari kita selesaikan dengan Koleksi . unmodifiableSet ():

Set unmodifiableSet = Collections.unmodifiableSet(set);

Terakhir, untuk memastikan instance unmodifiableSet kami tidak dapat diubah, mari buat kasus uji sederhana:

@Test(expected = UnsupportedOperationException.class) public void testUnmodifiableSet() { // create and initialize the set instance Set unmodifiableSet = Collections.unmodifiableSet(set); unmodifiableSet.add("Costa Rica"); }

Seperti yang kami harapkan, pengujian akan berjalan dengan sukses. Selain itu, operasi add () dilarang pada instance unmodifiableSet dan akan memunculkan UnsupportedOperationException .

Sekarang, mari kita ubah contoh set awal dengan menambahkan nilai yang sama padanya:

set.add("Costa Rica");

Dengan cara ini, kami secara tidak langsung memodifikasi set yang tidak dapat dimodifikasi. Jadi, saat kami mencetak instance unmodifiableSet :

[Canada, USA, Costa Rica]

Seperti yang bisa kita lihat, item "Kosta Rika" juga ada di unmodifiableSet.

4. Buat Set Immutable di Java 9

Sejak Java 9, metode pabrik statis Set.of (elements) tersedia untuk membuat set yang tidak dapat diubah:

Set immutable = Set.of("Canada", "USA");

5. Buat Set yang Tidak Dapat Diubah dalam Jambu Biji

Cara lain agar kita dapat membuat set yang tidak berubah adalah dengan menggunakan kelas ImmutableSet Guava . Ini menyalin data yang ada ke dalam instance baru yang tidak dapat diubah. Akibatnya, data di dalam ImmutableSet tidak akan berubah saat kami mengubah Set asli .

Seperti implementasi inti Java, setiap upaya untuk mengubah instance immutable yang dibuat akan memunculkan UnsupportedOperationException .

Sekarang, mari jelajahi berbagai cara untuk membuat instance yang tidak dapat diubah.

5.1. Menggunakan ImmutableSet. salinan dari()

Sederhananya, ImmutableSet . copyOf () metode mengembalikan salinan semua elemen dalam set:

Set immutable = ImmutableSet.copyOf(set);

Jadi, setelah mengubah set awal, instance yang tidak dapat diubah akan tetap sama:

[Canada, USA]

5.2. Menggunakan ImmutableSet .of ()

Demikian pula, dengan metode ImmutableSet.of () kita dapat langsung membuat set yang tidak dapat diubah dengan nilai yang diberikan:

Set immutable = ImmutableSet.of("Canada", "USA");

Saat kita tidak menentukan elemen apa pun, ImmutableSet.of () akan mengembalikan set yang tidak dapat diubah yang kosong.

Ini dapat dibandingkan dengan Set .of () pada Java 9 .

6. Kesimpulan

Dalam artikel singkat ini, kita membahas Set yang tidak dapat diubah dalam bahasa Java. Selain itu, kami menunjukkan cara membuat Kumpulan yang tidak dapat diubah menggunakan API Koleksi dari inti Java, Java 9, dan pustaka Guava.

Akhirnya, seperti biasa, kode lengkap untuk artikel ini tersedia di GitHub.