Yah, a List
bisa sangat cepat jika algoritme hanya dapat diimplementasikan dengan ::
, head
dan tail
. Saya mendapat pelajaran objek tentang hal itu baru-baru ini, ketika saya mengalahkan Java split
dengan menghasilkan List
bukan Array
, dan tidak bisa mengalahkan itu dengan hal lain.
Namun, List
memiliki masalah mendasar: tidak bekerja dengan algoritma paralel. Saya tidak dapat membagi List
menjadi beberapa segmen, atau menggabungkannya kembali, secara efisien.
Ada beberapa koleksi lain yang dapat menangani paralelisme dengan lebih baik - dan Vector
merupakan salah satunya. Vector
juga memiliki lokalitas besar - yang List
tidak - yang dapat menjadi nilai tambah nyata untuk beberapa algoritma.
Jadi, semua hal dipertimbangkan, Vector
adalah pilihan terbaik kecuali jika Anda memiliki pertimbangan khusus yang membuat salah satu koleksi lain lebih disukai - misalnya, Anda dapat memilih Stream
jika Anda ingin evaluasi dan caching yang malas ( Iterator
lebih cepat tetapi tidak menembolok), atau List
jika Algoritma secara alami diimplementasikan dengan operasi yang saya sebutkan.
Ngomong-ngomong, lebih baik menggunakan Seq
atau IndexedSeq
kecuali Anda menginginkan bagian tertentu dari API (seperti List
itu ::
), atau bahkan GenSeq
atau GenIndexedSeq
jika algoritma Anda dapat dijalankan secara paralel.
List<String> l = new ArrayList<String>()
blog Scala akan membuat Anda percaya bahwa semua orang menggunakan Daftar untuk mendapatkan kebaikan koleksi persisten - tetapi apakah Vector bertujuan umum cukup bahwa kita harus menggunakannya di tempat Daftar?