Jawaban:
Dalam istilah Jawa, Scala adalah Seq
Java List
, dan Scala adalah List
Java LinkedList
.
Perhatikan bahwa itu Seq
adalah trait
, yang setara dengan Java interface
, tetapi dengan yang setara dengan metode bek yang akan datang. Scala's List
adalah kelas abstrak yang diperluas oleh Nil
dan ::
, yang merupakan implementasi konkret dari List
.
Jadi, di mana Java List
adalah interface
, Scala List
adalah implementasi.
Selain itu, Scala List
tidak dapat diubah, yang tidak terjadi pada LinkedList
. Kenyataannya, Java tidak memiliki yang setara dengan koleksi yang tidak dapat diubah (hanya baca saja yang menjamin objek baru tidak dapat diubah, tetapi Anda masih dapat mengubah yang lama, dan, oleh karena itu, yang "hanya baca").
Scala's List
sangat dioptimalkan oleh kompiler dan perpustakaan, dan ini adalah tipe data dasar dalam pemrograman fungsional. Namun, ia memiliki keterbatasan dan itu tidak memadai untuk pemrograman paralel. Hari-hari ini, Vector
adalah pilihan yang lebih baik daripada List
, tetapi kebiasaan sulit dihilangkan.
Seq
adalah generalisasi yang baik untuk urutan, jadi jika Anda memprogram ke antarmuka, Anda harus menggunakannya. Perhatikan bahwa sebenarnya ada tiga dari mereka: collection.Seq
, collection.mutable.Seq
dan collection.immutable.Seq
, dan itu adalah yang terakhir yang adalah "default" diimpor ke dalam ruang lingkup.
Ada juga GenSeq
dan ParSeq
. Metode yang terakhir berjalan secara paralel jika memungkinkan, sedangkan yang pertama adalah induk dari keduanya Seq
dan ParSeq
, menjadi generalisasi yang cocok ketika paralelisme kode tidak menjadi masalah. Keduanya relatif baru diperkenalkan, sehingga orang belum menggunakannya terlalu banyak.
UnsupportedOperationException
karena ini. Untuk membuat daftar abadi di Jawa Anda menggunakan Collections.unmodifiableList () dan juga ada metode lain untuk Set, Maps dll. Docs.oracle.com/javase/6/docs/api/java/util/…
Sebuah Seq adalah Iterable yang memiliki urutan didefinisikan elemen. Urutan memberikan metode apply()
untuk pengindeksan, mulai dari 0 hingga panjang urutan. Seq memiliki banyak subclass termasuk Queue, Range, List, Stack, dan LinkedList.
Sebuah Daftar adalah Seq yang diimplementasikan sebagai linked list berubah. Ini paling baik digunakan dalam kasus-kasus dengan pola akses terakhir-masuk pertama-keluar (LIFO).
Berikut adalah hierarki kelas koleksi lengkap dari Scala FAQ :
Seq
adalah sifat yang List
mengimplementasikan.
Jika Anda mendefinisikan wadah Anda sebagai Seq
, Anda dapat menggunakan wadah apa pun yang menerapkan Seq
sifat.
scala> def sumUp(s: Seq[Int]): Int = { s.sum }
sumUp: (s: Seq[Int])Int
scala> sumUp(List(1,2,3))
res41: Int = 6
scala> sumUp(Vector(1,2,3))
res42: Int = 6
scala> sumUp(Seq(1,2,3))
res44: Int = 6
Catat itu
scala> val a = Seq(1,2,3)
a: Seq[Int] = List(1, 2, 3)
Hanya bantuan singkat untuk:
scala> val a: Seq[Int] = List(1,2,3)
a: Seq[Int] = List(1, 2, 3)
jika tipe kontainer tidak ditentukan, struktur data yang mendasarinya default ke List
.
Di Scala, Daftar mewarisi dari Seq, tetapi mengimplementasikan Produk ; di sini adalah definisi Daftar yang tepat :
sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...
[Catatan: yang sebenarnya definisi . Tad sedikit lebih kompleks, untuk fit dengan dan membuat penggunaan kerangka koleksi yang sangat kuat Scala]
Seperti yang dikatakan @ daniel-c-sobral, List memperluas sifat Seq dan merupakan kelas abstrak yang diterapkan oleh scala.collection.immutable.$colon$colon
(atau ::
singkatnya), tetapi secara teknis, pikiran bahwa sebagian besar daftar dan seq yang kami gunakan diinisialisasi dalam bentuk Seq(1, 2, 3)
atau List(1, 2, 3)
yang keduanya kembali scala.collection.immutable.$colon$colon
, maka seseorang dapat menulis:
var x: scala.collection.immutable.$colon$colon[Int] = null
x = Seq(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
x = List(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
Sebagai hasilnya, saya berpendapat bahwa satu-satunya hal yang penting adalah metode yang ingin Anda ungkapkan, misalnya untuk menambahkan Anda dapat menggunakan ::
dari Daftar yang saya temukan berlebihan dengan +:
dari Seq dan saya pribadi tetap menggunakan Seq secara default.
String
bukan koleksi, ini adalah contoh dari kelas yang tidak dapat diubah yang akrab bagi programmer Java.