Perbedaan utama adalah bahwa Collections.emptyList()
mengembalikan daftar yang tidak dapat diubah , yaitu daftar yang Anda tidak dapat menambahkan elemen. (Hal yang sama berlaku untuk yang List.of()
diperkenalkan di Jawa 9.)
Dalam kasus yang jarang terjadi di mana Anda tidak ingin mengubah daftar kembali, Collections.emptyList()
dan List.of()
dengan demikian tidak seorang pilihan yang baik.
Saya akan mengatakan bahwa mengembalikan daftar yang tidak dapat diubah adalah baik-baik saja (dan bahkan cara yang disukai) selama kontrak (dokumentasi) tidak secara eksplisit menyatakan berbeda.
Selain itu, emptyList()
mungkin tidak membuat objek baru dengan setiap panggilan.
Implementasi metode ini tidak perlu membuat objek Daftar terpisah untuk setiap panggilan. Menggunakan metode ini cenderung memiliki biaya yang sebanding dengan menggunakan bidang seperti-bernama. (Tidak seperti metode ini, bidang tidak menyediakan keamanan tipe.)
Implementasi emptyList
tampilannya sebagai berikut:
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
Jadi jika metode Anda (yang mengembalikan daftar kosong) disebut sangat sering, pendekatan ini bahkan dapat memberi Anda kinerja yang sedikit lebih baik baik dari segi CPU dan memori.
Collections.emptyList()
lebih cocok untuk katakanlah, pengecekan error dan sejenisnya?NullPointerException
dengan kembaliCollections.emptyList()
sebagai gantinyanull
.Collections.emptyList()
iterable dan mengembalikan panjang, sehingga dapat digunakan untuk loop tanpa kecuali dilemparkan.List.of()
?new ArrayList<>()
itu juga membuat keputusan desain jelas; elemen tidak akan ditambahkan ke daftar ini.Dimulai dengan Java 5.0 Anda dapat menentukan jenis elemen dalam wadah:
Saya setuju dengan tanggapan lain bahwa untuk kasus di mana Anda ingin mengembalikan daftar kosong yang tetap kosong, Anda harus menggunakan pendekatan ini.
sumber
List<Foo> list = Collections.emptyList()
Collections.emptyList
tidak berubah sehingga ada perbedaan antara kedua versi sehingga Anda harus mempertimbangkan pengguna dari nilai yang dikembalikan.Kembali
new ArrayList<Foo>
selalu menciptakan contoh baru objek sehingga memiliki biaya tambahan yang sangat sedikit yang terkait dengannya yang dapat memberi Anda alasan untuk menggunakannyaCollections.emptyList
. Saya suka menggunakanemptyList
hanya karena lebih mudah dibaca.sumber
Berhati-hatilah. Jika Anda kembali
Collections.emptyList()
dan kemudian mencoba melakukan beberapa perubahan dengan sukaadd()
atau pertengkaran seperti itu, Anda akan memilikiUnsupportedOperationException()
karenaCollections.emptyList()
mengembalikan objek yang tidak dapat diubah.sumber
Saya akan pergi dengan
Collections.emptyList()
jika daftar yang dikembalikan tidak diubah dengan cara apa pun (karena daftar tidak berubah), kalau tidak saya akan pergi dengan opsi 2.Manfaatnya
Collections.emptyList()
adalah bahwa instance statis yang sama dikembalikan setiap kali dan sehingga tidak ada pembuatan instance yang terjadi untuk setiap panggilan.sumber
Gunakan Collections.emptyList () jika Anda ingin memastikan bahwa daftar yang dikembalikan tidak pernah dimodifikasi. Inilah yang dikembalikan saat memanggil blankList ():
sumber
Collections.emptyList()
memiliki biaya konstruksi. Melihat detail implementasi (walaupun mungkin tidak sama pada semua JVM) mengkonfirmasi bahwa itu tidak. @ Amul, dari mana JVM ini?Jawaban yang diberikan menekankan fakta bahwa
emptyList()
mengembalikan yang kekalList
tetapi tidak memberikan alternatif. KasusArrayList(int initialCapacity)
khusus Constructor0
jadi kembali dannew ArrayList<>(0)
bukannew ArrayList<>()
juga bisa menjadi solusi yang layak:[...]
(sumber dari Java 1.8.0_72)
sumber