ArrayList yang tidak dapat diubah di Java

1. Ikhtisar

Tutorial singkat ini akan menunjukkan cara membuat ArrayList tidak dapat diubah dengan inti JDK, dengan Guava dan terakhir dengan Apache Commons Collections 4.

Artikel ini adalah bagian dari seri “ Java - Kembali ke Dasar ” di Baeldung.

2. Dengan JDK

Pertama, JDK menyediakan cara yang bagus untuk mendapatkan koleksi yang tidak dapat dimodifikasi dari yang sudah ada:

Collections.unmodifiableList(list);

Koleksi baru seharusnya tidak lagi dapat diubah pada saat ini:

@Test(expected = UnsupportedOperationException.class) public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() { List list = new ArrayList(Arrays.asList("one", "two", "three")); List unmodifiableList = Collections.unmodifiableList(list); unmodifiableList.add("four"); }

2.1. Dengan Java 9

Sejak Java 9, kita dapat menggunakan metode pabrik statis List.of (E… elements) untuk membuat daftar yang tidak dapat diubah:

@Test(expected = UnsupportedOperationException.class) public final void givenUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable() { final List list = new ArrayList(Arrays.asList("one", "two", "three")); final List unmodifiableList = List.of(list.toArray(new String[]{})); unmodifiableList.add("four"); }

Perhatikan bagaimana kita harus mengubah daftar yang ada menjadi sebuah array. Ini karena List.of (elemen) menerima parameter vararg.

3. Dengan Jambu Biji

Guava menyediakan fungsionalitas serupa untuk membuat versi ImmutableList -nya sendiri :

ImmutableList.copyOf(list);

Demikian pula - daftar yang dihasilkan tidak boleh dimodifikasi:

@Test(expected = UnsupportedOperationException.class) public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() { List list = new ArrayList(Arrays.asList("one", "two", "three")); List unmodifiableList = ImmutableList.copyOf(list); unmodifiableList.add("four"); }

Perhatikan bahwa operasi ini sebenarnya akan membuat salinan dari daftar asli , bukan hanya tampilan.

Guava juga menyediakan pembangun - ini akan mengembalikan ImmutableList yang diketik kuat, bukan hanya Daftar :

@Test(expected = UnsupportedOperationException.class) public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() { List list = new ArrayList(Arrays.asList("one", "two", "three")); ImmutableList unmodifiableList = ImmutableList.builder().addAll(list).build(); unmodifiableList.add("four"); }

4. Dengan Apache Collections Commons

Terakhir, Commons Collection juga menyediakan API untuk membuat daftar yang tidak dapat diubah:

ListUtils.unmodifiableList(list);

Dan lagi, mengubah daftar yang dihasilkan akan menghasilkan UnsupportedOperationException :

@Test(expected = UnsupportedOperationException.class) public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable() { List list = new ArrayList(Arrays.asList("one", "two", "three")); List unmodifiableList = ListUtils.unmodifiableList(list); unmodifiableList.add("four"); }

5. Kesimpulan

Tutorial ini mengilustrasikan cara mudah membuat Daftar yang tidak dapat dimodifikasi dari ArrayList yang ada menggunakan Koleksi JDK inti, Google Guava, atau Apache Commons.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di Github - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.