Memulakan HashSet pada Masa Pembinaan

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan memperkenalkan pelbagai kaedah untuk menginisialisasi HashSet dengan nilai, pada masa pembinaannya .

Sekiranya anda ingin meneroka ciri-ciri HashSet , rujuk artikel teras ini di sini.

Kami akan menyelami kaedah bawaan Java sejak Java 5 dan sebelumnya diikuti dengan mekanisme baru yang diperkenalkan sejak Java 8 . Kami juga akan melihat kaedah utiliti khusus dan akhirnya meneroka ciri-ciri yang disediakan oleh perpustakaan koleksi pihak ketiga , khususnya Google Jambu Batu.

Sekiranya anda bernasib baik kerana telah berhijrah ke JDK9 +, anda boleh menggunakan kaedah kilang koleksi.

2. Kaedah Built-In Java

Mari kita mulakan dengan memeriksa tiga mekanisme bawaan yang tersedia sejak Java 5 atau sebelumnya .

2.1. Menggunakan Contoh Koleksi Lain

Kita dapat menyampaikan contoh koleksi lain yang ada untuk menginisialisasi Set . Dalam contoh di bawah, kami menggunakan Senarai yang dibuat sebaris :

Set set = new HashSet(Arrays.asList("a", "b", "c"));

2.2. Menggunakan Kelas Tanpa Nama

Dalam pendekatan lain, kita boleh menggunakan kelas tanpa nama untuk menambahkan elemen ke HashSet .

Perhatikan penggunaan pendakap kerinting berganda. Pendekatan ini secara teknikal sangat mahal kerana mewujudkan kelas tanpa nama setiap kali dipanggil.

Oleh itu, bergantung kepada seberapa kerap kita perlu menginisialisasi Set, kita boleh cuba menghindari penggunaan pendekatan ini:

Set set = new HashSet(){{ add("a"); add("b"); add("c"); }};

2.3. Menggunakan Kaedah Utiliti Koleksi Sejak Java 5

Kelas utiliti Java's Collections menyediakan kaedah bernama singleton untuk membuat Set dengan satu elemen . The Set contoh dicipta dengan singleton kaedah ini tidak berubah makna yang kita tidak boleh menambah lebih banyak nilai kepada ia.

Terdapat situasi terutamanya dalam pengujian unit di mana kita perlu membuat Set dengan satu nilai:

Set set = Collections.singleton("a");

3. Menentukan Kaedah Utiliti Khusus

Kita boleh menentukan kaedah akhir statik seperti di bawah. Kaedah ini menerima hujah yang berubah-ubah .

Menggunakan Collections.addSemua yang menerima objek koleksi dan array nilai adalah yang terbaik antara lain kerana overhead rendah nilai penyalinan.

Yang kaedah ini menggunakan generik supaya kita boleh lulus nilai apa-apa jenis:

public static final  Set newHashSet(T... objs) { Set set = new HashSet(); Collections.addAll(set, objs); return set; }

Kaedah utiliti boleh digunakan dalam kod kami seperti di bawah.

Set set = newHashSet("a","b","c");

4. Menggunakan Stream Sejak Java 8

Dengan pengenalan Stream API di Java 8, kami memiliki pilihan tambahan. Kita dapat menggunakan Stream dengan Pengumpul seperti yang ditunjukkan dalam kod di bawah ini:

Set set = Stream.of("a", "b", "c") .collect(Collectors.toCollection(HashSet::new));

5. Menggunakan Perpustakaan Koleksi Pihak Ketiga

Terdapat banyak perpustakaan koleksi pihak ke-3 termasuk Jambu Google, Koleksi Apache Commons, dan Koleksi Eclipse hanya untuk beberapa nama.

Perpustakaan ini menyediakan kaedah utiliti yang mudah untuk memulakan koleksi seperti Set. Oleh kerana Jambu Batu adalah salah satu yang paling biasa digunakan di sini, kita mempunyai contoh daripadanya. Jambu batu mempunyai kaedah mudah untuk objek Set yang boleh berubah dan tidak berubah :

Set set = Sets.newHashSet("a", "b", "c");

Begitu juga, Jambu biji mempunyai kelas utiliti untuk membuat contoh Set yang tidak berubah , seperti yang dapat kita lihat dalam contoh di bawah.

Set set = ImmutableSet.of("a", "b", "c");

6. Kesimpulannya

Sebagai kesimpulan, kami melihat pelbagai cara di mana HashSet dapat dimulakan semasa ia dibina. Pendekatan ini tidak semestinya merangkumi semua cara yang mungkin dengan cara apa pun. Ini hanyalah usaha untuk menunjukkan cara yang paling biasa.

Salah satu pendekatan yang tidak dibahas di sini adalah menggunakan pembangun objek untuk membina Set .

Seperti biasa, contoh kod kerja boleh didapati di GitHub.