जवाबों:
जावा के संदर्भ में, स्काला Seqजावा का होगा List, और स्काला Listजावा का होगा LinkedList।
ध्यान दें कि Seqएक है trait, जो जावा के बराबर है interface, लेकिन ऊपर और आने वाले रक्षक तरीकों के बराबर है। स्काला Listएक अमूर्त वर्ग है जो कि विस्तारित है Nilऔर ::, जिसके ठोस कार्यान्वयन हैं List।
तो, जहां जावा Listएक है interface, स्काला का Listकार्यान्वयन है।
इसके अलावा, स्काला Listअपरिवर्तनीय है, जो कि मामला नहीं है LinkedList। वास्तव में, जावा के पास अपरिवर्तनीय संग्रह के बराबर नहीं है (केवल एक चीज जो केवल नई वस्तु की गारंटी देती है उसे बदला नहीं जा सकता है, लेकिन आप अभी भी पुराने को बदल सकते हैं, और इसलिए, "केवल पढ़ने के लिए" एक)।
Scala's Listको कंपाइलर और लाइब्रेरीज़ द्वारा अत्यधिक अनुकूलित किया गया है, और यह कार्यात्मक प्रोग्रामिंग में एक मौलिक डेटा प्रकार है। हालाँकि, इसकी सीमाएँ हैं और यह समानांतर प्रोग्रामिंग के लिए अपर्याप्त है। इन दिनों, Vectorसे बेहतर विकल्प है List, लेकिन आदत को तोड़ना मुश्किल है।
Seqअनुक्रमों के लिए एक अच्छा सामान्यीकरण है, इसलिए यदि आप इंटरफेस के लिए प्रोग्राम करते हैं, तो आपको इसका उपयोग करना चाहिए। नोट वहाँ वास्तव में तीन उनमें से हैं कि: collection.Seq, collection.mutable.Seqऔर collection.immutable.Seq, और यह बाद के एक है कि "डिफ़ॉल्ट" दायरे में आयात किया है।
वहाँ भी है GenSeqऔर ParSeq। बाद के तरीके समानांतर में चलते हैं जहां संभव है, जबकि पूर्व दोनों के लिए माता-पिता है Seqऔर ParSeqजब एक कोड के समानांतरवाद के लिए एक उपयुक्त सामान्यीकरण नहीं होता है। वे दोनों अपेक्षाकृत नए हैं, इसलिए लोग उन्हें अभी तक उपयोग नहीं करते हैं।
UnsupportedOperationExceptionइस वजह से कुछ हिट होने की संभावना है । जावा में अपरिवर्तनीय सूची) बनाने के लिए आप Collections.unmodifiableList (का उपयोग करें और इसी तरह देखते हैं सेट के लिए अन्य तरीकों, नक्शे आदि docs.oracle.com/javase/6/docs/api/java/util/...
एक Seq एक Iterable तत्वों का एक परिभाषित आदेश किया है। अनुक्रम apply()अनुक्रमण के लिए एक विधि प्रदान करते हैं , 0 से लेकर अनुक्रम की लंबाई तक। Seq में क्यू, रेंज, लिस्ट, स्टैक और लिंक्डलिस्ट सहित कई उपवर्ग हैं।
एक सूची एक Seq है जिसे एक अपरिवर्तनीय लिंक्ड सूची के रूप में लागू किया जाता है। पिछले-इन-आउट (LIFO) एक्सेस पैटर्न वाले मामलों में इसका सबसे अच्छा उपयोग किया जाता है।
यहाँ स्केल संग्रह से पूरा संग्रह वर्ग पदानुक्रम है :
Seqएक गुण है जो Listलागू करता है।
यदि आप अपने कंटेनर को इस रूप में परिभाषित करते हैं Seq, तो आप किसी भी कंटेनर का उपयोग कर सकते हैं जो 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
ध्यान दें कि
scala> val a = Seq(1,2,3)
a: Seq[Int] = List(1, 2, 3)
के लिए सिर्फ एक छोटा हाथ है:
scala> val a: Seq[Int] = List(1,2,3)
a: Seq[Int] = List(1, 2, 3)
यदि कंटेनर प्रकार निर्दिष्ट नहीं है, तो अंतर्निहित डेटा संरचना डिफ़ॉल्ट हो जाती है List।
स्काला में, एक सूची Seq से विरासत में मिलती है, लेकिन उत्पाद लागू करता है ; यहाँ सूची की उचित परिभाषा है :
sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...
[नोट: वास्तविक परिभाषा । एक बालक के साथ और मेकअप स्काला के बहुत शक्तिशाली संग्रह ढांचे के उपयोग में फिट करने के लिए और अधिक जटिल सा, क्रम में है]
जैसा कि @ daniel-c-sobral ने कहा, सूची गुण Seq का विस्तार करती है और scala.collection.immutable.$colon$colon(या ::संक्षेप के लिए) द्वारा कार्यान्वित एक अमूर्त वर्ग है , लेकिन एक तरफ तकनीकी, यह ध्यान में रखते हुए कि हम जिन सूचियों और seq का उपयोग करते हैं उनमें से अधिकांश को प्रारंभिक रूप में Seq(1, 2, 3)या List(1, 2, 3)जिसे दोनों वापस करते हैं scala.collection.immutable.$colon$colon, इसलिए कोई लिख सकता है:
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]]
नतीजतन, मैं केवल एक ही बात पर बहस करूंगा कि वे मामले हैं, जिन्हें आप उजागर करना चाहते हैं, उदाहरण के लिए आप ::जिस सूची का उपयोग कर सकते हैं , उसे मैं +:Seq से निरर्थक पाता हूं और मैं व्यक्तिगत रूप से डिफ़ॉल्ट रूप से Seq से चिपक जाता हूं।
Stringयह संग्रह नहीं है, यह जावा अक्षर से परिचित अपरिवर्तनीय वर्गों का एक उदाहरण है।