Yah, a Listbisa sangat cepat jika algoritme hanya dapat diimplementasikan dengan ::, headdan tail. Saya mendapat pelajaran objek tentang hal itu baru-baru ini, ketika saya mengalahkan Java splitdengan menghasilkan Listbukan Array, dan tidak bisa mengalahkan itu dengan hal lain.
Namun, Listmemiliki masalah mendasar: tidak bekerja dengan algoritma paralel. Saya tidak dapat membagi Listmenjadi beberapa segmen, atau menggabungkannya kembali, secara efisien.
Ada beberapa koleksi lain yang dapat menangani paralelisme dengan lebih baik - dan Vectormerupakan salah satunya. Vectorjuga memiliki lokalitas besar - yang Listtidak - yang dapat menjadi nilai tambah nyata untuk beberapa algoritma.
Jadi, semua hal dipertimbangkan, Vectoradalah pilihan terbaik kecuali jika Anda memiliki pertimbangan khusus yang membuat salah satu koleksi lain lebih disukai - misalnya, Anda dapat memilih Streamjika Anda ingin evaluasi dan caching yang malas ( Iteratorlebih cepat tetapi tidak menembolok), atau Listjika Algoritma secara alami diimplementasikan dengan operasi yang saya sebutkan.
Ngomong-ngomong, lebih baik menggunakan Seqatau IndexedSeqkecuali Anda menginginkan bagian tertentu dari API (seperti Listitu ::), atau bahkan GenSeqatau GenIndexedSeqjika 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?