2011-08-10 17 views
18

मैं स्कैला के HashSet और Set प्रकारों से बहुत उलझन में हूं क्योंकि वे दोनों एक ही काम करते हैं।स्कैला में 'हैशसेट' और 'सेट' के बीच का अंतर?

  • उनके बीच क्या अंतर है?
  • क्या यह जावा में समान है?
  • मेरे संदर्भ में यह कहता है कि HashSet एक "स्पष्ट सेट क्लास" है (Set की तुलना में)। इसका क्या मतलब है?
+0

यह भी देखें [इस प्रश्न का एक और संस्करण] (http://stackoverflow.com/questions/18759913/what-is-the-difference-between-hashset-and-set-and-when-should-each-one), और साथ ही के लिए एक समान प्रश्न [ 'Map' बनाम' HashMap'] (http://stackoverflow.com/questions/31685236/scala-map-vs-hashmap) – EthanP

उत्तर

32

स्कैला के उत्परिवर्तनीय और अपरिवर्तनीय HashSet कार्यान्वयन ठोस वर्ग हैं जिन्हें आप तुरंत कर सकते हैं। उदाहरण के लिए, यदि आप स्पष्ट रूप से एक नया scala.collection.immutable.HashSet मांगते हैं, तो आपको हमेशा एक सेट मिल जाएगा जो हैश ट्राई द्वारा लागू किया गया है। अन्य सेट कार्यान्वयन हैं, जैसे कि ListSet, जो एक सूची का उपयोग करता है।

Settrait है जो सभी सेट कार्यान्वयन विस्तार (जबकि जावा में, Set एक इंटरफ़ेस है)।

Setapply ** विधि के साथ एक साथी ऑब्जेक्ट * भी है। जब आप Set(...) पर कॉल करते हैं, तो आप इस फैक्ट्री विधि को कॉल कर रहे हैं और वापसी मूल्य प्राप्त कर रहे हैं जो किसी प्रकार का Set है। यह HashSet हो सकता है, लेकिन कुछ अन्य कार्यान्वयन हो सकता है। 2 के अनुसार, एक अपरिवर्तनीय सेट के लिए डिफ़ॉल्ट कार्यान्वयन खाली सेट के लिए विशेष प्रतिनिधित्व है और सेट 4. अपरिवर्तनीय सेट आकार 5 और ऊपर और परिवर्तनशील सेट सब HashSet उपयोग करने के लिए के आकार।


* स्काला में, बजाय स्थिर वर्ग तरीकों होने के लिए, आप एक सिंगलटन object अपनी कक्षा या विशेषता के रूप में एक ही नाम के साथ बना सकते हैं। इसे एक साथी ऑब्जेक्ट कहा जाता है, और जिस पर आप इसे परिभाषित करते हैं उसे ObjectName.method() कहा जा सकता है, जैसा कि आप जावा में एक स्थिर विधि को कॉल करेंगे।

** Set(x)Set.apply(x) के लिए वाक्य रचनात्मक चीनी है।

+3

'यह एक HashSet हो सकता है, लेकिन हो सकता है कुछ अन्य कार्यान्वयन। '- लेकिन कौन से कारक सेट के लौटे प्रकार पर निर्भर करता है? इससे पहले कि मैं 'Set' डिफ़ॉल्ट कार्यान्वयन के लिए लगता है कि' HashSet', के लिए 'IndexedSeq' है - वेक्टर और इतने पर .. – MyTitle

संबंधित मुद्दे