2012-11-17 24 views
11

जावा में हमारे पास दो अच्छी कक्षाएं हैं: enum एस और EnumMap के मानचित्र के लिए जिनकी चाबियाँ enum एस हैं। EnumSet को 64-बिट शब्द (या 64-बिट शब्दों की एक सरणी) और EnumMap मानों की सरणी के रूप में दर्शाया गया है, दोनों enum एस के क्रमिक संख्याओं द्वारा अनुक्रमित दोनों। तो सम्मिलित करें/लुकअप/निकालें/... ऑपरेशन केवल ओ (1) समय लेते हैं।क्या एनमसेट/एनमैप के बराबर एक स्कैला है?

क्या हमारे पास स्कैला - उत्परिवर्तनीय या अपरिवर्तनीय में ऐसा कुछ है?

मुझे BitSet (दोनों उत्परिवर्तनीय और अपरिवर्तनीय) मिले जो पूर्णांक पर चलते हैं, इसलिए मैंने माना कि Enumeration के सेट का एक प्रभावी कार्यान्वयन होगा। Value इसके द्वारा समर्थित है। लेकिन मुझे केवल Enumeration.ValueSet मिला, जो backed up by SortedSet[Int] है। हालांकि यह इतना बुरा नहीं है, BitSet इस उद्देश्य के लिए काफी अधिक कुशल लगता है।

मुझे के साथ नक्शे के किसी भी अनुकूलित कार्यान्वयन को EnumMap के समान कुंजी के रूप में नहीं मिला।

+1

विपरीत जावा 'enum's, स्काला के' Enumeration' मूल्यों मनमाना संख्यात्मक पहचानकर्ता हो सकता है और यही वजह है मुझे लगता है वहाँ जावा 'EnumSet' और' EnumMap' के लिए कोई सीधा बराबर है स्कैला में – ghik

+0

@ghik हालांकि यह सच है मैं कहूंगा कि यह सुविधा शायद ही कभी उपयोग की जाती है। और जब किसी ने मूल्यों के लिए बड़ी संख्या असाइन की है तो यह एक अलग 'सेट'/'मानचित्र' कार्यान्वयन का उपयोग करने की उसकी ज़िम्मेदारी होगी। –

+0

@ghik वास्तव में 2.10 impl में बग का स्रोत है। –

उत्तर

5

दरअसल, 2.10 गणना में। वैल्यूसेट बिट्ससेट का उपयोग करता है।

class ValueSet private[ValueSet] (private[this] var nnIds: immutable.BitSet)

That would be here.

+4

क्या वहां 'एनमैप' समकक्ष भी है? –

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

  • कोई संबंधित समस्या नहीं^_^