Struktur Kekal
Scala List
adalah struktur data rekursif berubah yang adalah suatu struktur fundamental dalam Scala, bahwa Anda harus (mungkin) akan menggunakannya lebih dari satu Array
(yang sebenarnya bisa berubah - yang analog berubah dari Array
yang IndexedSeq
).
Jika Anda berasal dari latar belakang Jawa, maka paralel yang jelas adalah ketika menggunakan LinkedList
lebih ArrayList
. Yang pertama umumnya digunakan untuk daftar yang hanya pernah dilintasi (dan yang ukurannya tidak diketahui dimuka) sedangkan yang kedua harus digunakan untuk daftar yang memiliki ukuran yang diketahui (atau ukuran maksimum) atau yang penting untuk akses acak cepat .
Struktur yang Dapat Berubah
ListBuffer
memberikan konversi waktu-konstan ke List
yang hanya digunakan untuk alasan ListBuffer
jika diperlukan konversi nanti.
Scala Array
harus diimplementasikan pada JVM oleh array Java, dan karenanya Array[Int]
mungkin lebih performan (sebagai int[]
) dari List[Int]
(yang akan mengotak isinya, kecuali Anda menggunakan versi Scala terbaru yang memiliki @specialized
fitur baru ) .
Namun, saya berpikir bahwa penggunaan Array
s di Scala harus dijaga agar tetap minimum karena rasanya Anda benar-benar perlu tahu apa yang terjadi di bawah tenda untuk memutuskan apakah array Anda benar-benar akan didukung oleh tipe primitif yang diperlukan, atau mungkin kotak sebagai jenis pembungkus.
Selain jawaban yang sudah diposting, berikut adalah beberapa spesifik.
Sementara
Array[A]
secara harfiah array Java, sebuahList[A]
adalah struktur data berubah yang baikNil
(daftar kosong) atau terdiri dari sepasang(A, List[A])
.Perbedaan kinerja
Perbedaan memori
Jadi, kecuali Anda memerlukan akses acak cepat, perlu menghitung elemen, atau karena alasan tertentu Anda memerlukan pembaruan yang merusak, a
List
lebih baik daripada aArray
.sumber
list = list.drop(i)
. Atau, Apakah ada keajaiban di balik tudung?drop
tidak perlu menyalin bagian dari daftar yang tidak dibatalkan. Misalnya(x::xs).drop(1)
persisxs
, bukan "salinan" darixs
.Array bisa berubah, artinya Anda dapat mengubah nilai setiap indeks, sedangkan Daftar (secara default) tidak berubah, artinya daftar baru dibuat setiap kali Anda melakukan modifikasi. Dalam kebanyakan kasus itu adalah lebih "fungsional" gaya bekerja dengan tipe data berubah dan Anda mungkin harus mencoba dan menggunakan Daftar dengan konstruksi seperti
yield
,foreach
,match
dan sebagainya.Untuk karakteristik kinerja, sebuah Array lebih cepat dengan akses acak ke elemen, sedangkan Daftar lebih cepat ketika menambahkan (menambahkan) elemen baru. Iterasi atas mereka sebanding.
sumber
iterate over
, karena cache