2010-10-14 18 views
5

किसी ने मुझे बताया है कि हैशैप्स धीमे हैं। तो मैं बस सोच रहा हूं कि हैशपैप या स्विच केस तर्क का उपयोग करना है या नहीं।हैशपैप का उपयोग क्यों करें?

मेरी आवश्यकता यह है। मेरे पास देश नाम और देश कोड का एक सेट है। मेरी सूची दृश्य देशों के नाम प्रदर्शित करता है। जब किसी देश का नाम आइटम क्लिक किया जाता है, तो मुझे देश कोड को टोस्ट करना होगा।

ऐसे परिदृश्य में, मैं CountryNames और कोड की एक HashMap को बनाए रखने और इस इसी कोड ?:

myMap.put("US", 355); 
myMap.put("UK", 459); 
//etc 

पाने के लिए या यह बेहतर तो

switch (vCountryNamePos): 
{ 
case 0: //US 
vCountryCode = 355; 
break; 
case 1: //UK 
vCountryCode = 459; 
break; 

//etc 
} 
की तरह एक स्विच मामले लिखना है का उपयोग करना चाहिए

कौन सा तेज़ है? यदि हैशमैप्स नहीं है, तो मानचित्र में किस व्यावहारिक परिदृश्य में उपयोग किया जाएगा?

-किकी

+3

यह प्रश्न एंड्रॉइड विशिष्ट प्रतीत नहीं होता है। – Brian

उत्तर

14

दो मानों के लिए, एक स्विच तेज होगा। एक हैशप हमेशा कम से कम आपकी कुंजी की समानता की जांच करेगा, इसलिए यह एक या दो .equals() परीक्षणों को हरा नहीं सकता है।
कई मूल्यों के लिए, हैश तेज होगा। एक स्विच को हर मूल्य का परीक्षण करना पड़ता है जब तक कि यह सही न हो।

मूल्यों की एक छोटी संख्या (10 या उससे ऊपर तक कहें) के लिए, एक स्विच पसंद करते हैं। यह हल्का और तेज़ होगा।
मूल्यों की एक बड़ी संख्या (50 के ऊपर) के लिए, एक हैश पसंद करते हैं। एक हैश को सभी मानों की जांच नहीं करनी पड़ेगी, इसलिए मूल्यों की संख्या बढ़ने पर यह स्विच से तेज़ होगा। 10 ~ 50 मूल्यों के लिए, मैं सुझाव दूंगा कि आप जो भी महसूस करते हैं वह अधिक पठनीय है क्योंकि प्रदर्शन समान होगा।

अब यदि आप संकलन समय पर ज्ञात स्थैतिक तारों पर अत्यधिक प्रदर्शन की तलाश में हैं, तो आप gnuperf जैसे कोड-जनरेटिंग टूल देख सकते हैं।
यदि आप संकलन समय पर अपने तारों को नहीं जानते हैं, लेकिन आप जानते हैं कि वे लंबाई में कम और सामान्य रूप से समान रूप से समान हैं, या सामान्य उपसर्गों के साथ, आप शायद ट्री डेटा संरचना के साथ सबसे तेज़ होंगे।
यदि आप बहुत ही विषम तारों, या उन वस्तुओं पर प्रदर्शन करना चाहते हैं जो स्ट्रिंग्स नहीं हो सकते हैं, तो हैश मैप जाने का रास्ता है। ऑब्जेक्ट्स की संख्या बहुत अधिक है (अरबों या उससे अधिक में) जब यह बहुत ही नामुमकिन है।

+0

ध्यान दें कि इस विशेष मामले में, आप ऑटोबॉक्सिंग/अनबॉक्सिंग से बचने के लिए एंड्रॉइड के स्पैर्सएरे जैसे कुछ उपयोग करना चाहेंगे। –

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