Yanıtlar:
Java terimleriyle Scala'nın SeqJava Listve Scala'nın ListJava olması gerekir LinkedList.
Not Seqbir olan traitJava'nın eşdeğerdir, interfaceancak eşdeğer olan savunucusu yöntemleri yukarı ve gelecek. Scala'nın Listgenişletilmiş Nilve ::somut uygulamaları olan soyut bir sınıftır List.
Java'nın Listbir olduğu yerde interface, Scala'nın Listbir uygulamasıdır.
Bunun ötesinde, Scala'nın Listdeğişmez bir durumu var, ki durum böyle değil LinkedList. Aslında, Java'nın değişmez koleksiyonlara eşdeğeri yoktur (salt okunur olan şey yalnızca yeni nesnenin değiştirilemeyeceğini garanti eder, ancak yine de eskisini ve dolayısıyla "salt okunur" olanı değiştirebilirsiniz).
Scala List, derleyici ve kütüphaneler tarafından oldukça optimize edilmiştir ve fonksiyonel programlamada temel bir veri türüdür. Ancak, sınırlamaları vardır ve paralel programlama için yetersizdir. Bu günlerde, Vectordaha iyi bir seçim List, ama alışkanlığı kırmak zor.
Seqdiziler için iyi bir genelleme olduğundan, arayüzlere program yapıyorsanız bunu kullanmalısınız. Not orada aslında üç tanesi olduğunu: collection.Seq, collection.mutable.Seqve collection.immutable.Seq, ve etki alanına dahil edilen, "varsayılan" dir ikincisi biridir.
Ayrıca GenSeqve var ParSeq. İkinci yöntemler mümkün olduğunda paralel çalışır, birincisi ise her ikisinin de ebeveynidir Seqve ParSeqbir kodun paralelliğinin önemi olmadığı zamanlar için uygun bir genellemedir. Her ikisi de nispeten yeni tanıtıldı, bu yüzden insanlar henüz çok fazla kullanmıyor.
UnsupportedOperationExceptionbu nedenle bazı vurmak muhtemeldir . Java'da değişmez bir liste oluşturmak için Collections.unmodifiableList () yöntemini kullanırsınız ve benzer şekilde Setler, Haritalar vb. İçin
Bir Sıra , tanımlanmış bir öğe sırasına sahip bir Tekrarlanabilirdir. Diziler apply(), 0 ile dizinin uzunluğu arasında değişen bir indeksleme yöntemi sağlar. Seq, Kuyruk, Aralık, Liste, Yığın ve LinkedList gibi birçok alt sınıfa sahiptir.
Bir Liste değişmez bir bağlantılı liste olarak uygulanan bir Seq olduğunu. En iyi son giren ilk çıkar (LIFO) erişim desenleri olan durumlarda kullanılır.
İşte Scala SSS bölümündeki tüm koleksiyon sınıfı hiyerarşisi :
SeqListuygulayan bir özelliktir .
Kapsayıcınızı olarak tanımlarsanız, özelliği Sequygulayan herhangi bir kap kullanabilirsiniz Seq.
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
Bunu not et
scala> val a = Seq(1,2,3)
a: Seq[Int] = List(1, 2, 3)
Kısa bir el için:
scala> val a: Seq[Int] = List(1,2,3)
a: Seq[Int] = List(1, 2, 3)
kap türü belirtilmezse, temel alınan veri yapısı varsayılan olarak kullanılır List.
Scala'da bir Liste, Seq'tan miras alır, ancak Ürünü uygular ; Burada doğru tanımıdır Listesi :
sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...
[Not: Scala'nın çok güçlü toplama çerçevesine uymak ve yararlanmak için gerçek tanım biraz daha karmaşıktır.]
@ Daniel c-Sobral belirtildiği gibi, listesi özelliği Seq uzanır ve uyguladığı soyut sınıftır scala.collection.immutable.$colon$colon(veya ::listeleri ve KCS çoğu bu formunda başlatılır kullanmak olduğu, zihin kısa), ama bir kenara teknik bir Seq(1, 2, 3)ya da List(1, 2, 3)bunların her ikisi de dönüş scala.collection.immutable.$colon$colon, böylece kişi yazabilir:
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]]
Sonuç olarak, önemli olan tek şeyden daha fazlasını ortaya çıkarmak için yöntemler olduğunu iddia ediyorum, örneğin, Seq'den ::fazla bulduğum Listeden kullanabileceğinizi +:ve varsayılan olarak kişisel olarak Seq'e bağlı olduğum listeyi kullanabilirsiniz.
Stringbir koleksiyon olmamasına rağmen , Java programcılarına tanıdık değişmez sınıflara bir örnektir.