Apakah ada keuntungan (atau banyak perbedaan) untuk menggunakan Arrays.asList (sesuatu) daripada Collections.singletonList (sesuatu) untuk membuat daftar yang berisi satu item? Yang terakhir membuat daftar yang dikembalikan juga tidak berubah.
java
collections
Howard Grimberg
sumber
sumber
ImmutableList.of()
danLists.newArrayList()
campurannya juga.Jawaban:
Collections.singletonList(something)
tidak dapat diubah sedangkan representasiArrays.asList(something)
ukuran tetapList
dari Array tempat Daftar dan Array bergabung dalam heap.Arrays.asList(something)
memungkinkan perubahan non-struktural dibuat untuk itu, yang akan tercermin ke Daftar dan array yang digabungkan. Itu melemparUnsupportedOperationException
untuk menambah, menghapus elemen meskipun Anda dapat mengatur elemen untuk indeks tertentu.Setiap perubahan yang dilakukan pada Daftar yang dikembalikan oleh
Collections.singletonList(something)
akan menghasilkanUnsupportedOperationException
.Juga, kapasitas Daftar yang dikembalikan oleh
Collections.singletonList(something)
selalu 1 tidak sepertiArrays.asList(something)
yang kapasitasnya akan sebesar array yang didukung.sumber
Saya hanya ingin menambahkan bahwa singletonlist tidak didukung oleh array dan hanya memiliki referensi untuk satu item itu. Agaknya, itu akan memakan lebih sedikit memori dan dapat menjadi signifikan tergantung pada jumlah daftar yang ingin Anda buat.
sumber
Metode
Arrays.asList
mengembalikan daftar ukuran tetap yang didukung oleh array yang ditentukan. Metode mengembalikan contohArrayList
yang merupakan kelas statis bersarang pribadi memperluasAbstractList
dan tidakjava.util.ArrayList
. Kelas statis ini menyediakan implementasi beberapa metode, misalnya,set, indexOf, forEach, replaceAll
dll. Tetapi ketika kita memanggilnyaadd
tidak memiliki implementasi sendiri, melainkan metode dariAbstractList
dipanggil yang melemparjava.lang.UnsupportedOperationException
.The
Collections.singletonList
pengembalian sebuah daftar kekal yang hanya berisi objek tertentu dan itu adalah serializable juga.Sebagai catatan, untuk daftar yang tidak dapat diubah, kami biasanya menggunakan
Collections.unmodifiableList
yang mengembalikan tampilan daftar yang tidak dapat dimodifikasi.Koleksi tampilan yang tidak dapat dimodifikasi adalah koleksi yang tidak dapat dimodifikasi dan juga merupakan tampilan ke koleksi dukungan. Perhatikan bahwa perubahan pada koleksi dukungan mungkin masih dimungkinkan, dan jika terjadi, mereka dapat dilihat melalui tampilan yang tidak dapat dimodifikasi.
Kita dapat memiliki daftar abadi sejati di Java 10 dan yang lebih baru. Ada dua cara untuk mendapatkan daftar yang benar-benar tidak dapat dimodifikasi :
var unmodifiableList = List.copyOf(srcList);
var unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList());
Jika salah satu dari dua variabel ini digunakan, nilai akan tetap menjadi "Apple" dan bukan "Apricot".Sebagai per doc dari Java 10 :
sumber