एक Java
पृष्ठभूमि से आ रहा है, मैं संग्रह से निपटने का आम बात करने के लिए इस्तेमाल कर रहा हूँ: स्पष्ट रूप से कुछ अपवाद हो सकता है लेकिन आम तौर पर कोड दिखाई देगा:स्काला संग्रह मानक अभ्यास
public class MyClass {
private Set<String> mySet;
public void init() {
Set<String> s = new LinkedHashSet<String>();
s.add("Hello");
s.add("World");
mySet = Collections.unmodifiableSet(s);
}
}
मैं कबूल करना है कि है मैं स्कैला में विकल्पों के काफी हद तक परेशान हूं। नहीं है:
scala.List
(औरSeq
)scala.collections.Set
(औरMap
)scala.collection.immutable.Set
(औरMap
,Stack
नहीं बल्किList
)scala.collection.mutable.Set
(औरMap
,Buffer
नहीं बल्किList
)scala.collection.jcl
तो प्रश्न!
- क्यों
List
औरSeq
पैकेजscala
में परिभाषित कर रहे हैं और नहींscala.collection
(भले हीSeq
के कार्यान्वयन संग्रह उप संकुल में हैं)? - क्या के लिए मानक तंत्र आरंभ कर रहा है एक संग्रह और फिर ठंड यह (जो जावा में पूरा हो जाने पर
unmodifiable
में लपेटकर द्वारा)? - कुछ संग्रह प्रकार क्यों हैं (उदा।
MultiMap
) केवल म्यूटेबल के रूप में परिभाषित किया गया है? (कोई अपरिवर्तनीयMultiMap
नहीं है)?
मैंने डैनियल स्पिवाक के excellent series on scala collections पढ़ा है और अभी भी इस बात से परेशान हूं कि वास्तव में अभ्यास में उनका उपयोग कैसे किया जाएगा। निम्नलिखित लागू की पूर्ण पैकेज घोषणाओं की वजह से थोड़ा बोझल लगता है:
class MyScala {
var mySet: scala.collection.Set[String] = null
def init(): Unit = {
val s = scala.collection.mutable.Set.empty[String]
s + "Hello"
s + "World"
mySet = scala.collection.immutable.Set(s : _ *)
}
}
हालांकि यकीनन इस अधिक सही जावा संस्करण के रूप में अपरिवर्तनीय संग्रह (जावा मामले में, जहां अंतर्निहित संग्रह सकता है के रूप में नहीं बदल सकते हैं की तुलना में है नीचे unmodifiable
आवरण बदला जा)
मैं अनुमान लगा रहा हूं कि कुछ मूल्यों के माध्यम से लूपिंग और इसे सेट में जोड़ना, बजाय मूल्यों के समूह के बजाय। – runT1ME