आप mot शायद सही कर रहे हैं। मैं वास्तव में यादृच्छिक अभिगम क्षमताओं के उपयोग को छोड़ सकता हूं (यह है कि आप इसे कैसे कहते हैं?), और मुझे वस्तुओं के क्रम की परवाह नहीं है। मुझे बस ऑब्जेक्ट्स जोड़ने में सक्षम होने की आवश्यकता है, फिर उन सभी पर पुन: प्रयास करें। साथ ही, यह वास्तव में एक सेट है (मुझे एक ही ऑब्जेक्ट को एक से अधिक बार नहीं चाहिए), लेकिन मैं इसे कभी भी एक से अधिक बार जोड़ने का प्रयास नहीं करूंगा ... क्या मुझे इसकी बजाय सूची का उपयोग करना चाहिए (हालांकि मुझे इसकी परवाह नहीं है आदेश)? इस तरह के सेट के लिए सबसे कुशल डेटा संरचना क्या है?
ए हैशसेट को हैश मैप के रूप में लागू किया गया है जो स्वयं की कुंजी को मैप करता है, इसलिए हैशसेट पर स्विच करने से प्रदर्शन में कोई फर्क नहीं पड़ता है।
अन्य विकल्प एक ट्रीसेट हैं, या (यह मानते हुए कि आपका एप्लिकेशन सूची वर्गों में से एक को डुप्लिकेट डालने का प्रयास नहीं करेगा)। यदि आपका आवेदन ऐसा है कि एक सूची काम करेगी, तो एक ऐरेलिस्ट या लिंक्डलिस्ट एक हैशसेट या ट्रीसेट से अधिक कुशल होगी।
हालांकि, hashCode
विधियों में आपके आवेदन का 50% समय व्यय करने के बारे में कुछ बहुत ही ख़राब है। जब तक हैश टेबल का आकार बदल नहीं जाता है, तब तक हैशकोड विधि को प्रति सेट या मानचित्र ऑपरेशन के दौरान ही बुलाया जाना चाहिए। तो या तो बहुत सारे मानचित्र/सेट आकार बदल रहे हैं, या आप बड़ी संख्या में सेट add
संचालन कर रहे हैं।
है nextInt() वास्तव में महंगा (AFAIK, वस्तु hashCode विधि सस्ती है, इसलिए प्रत्येक कॉल की लागत एक मुद्दा नहीं होना चाहिए।)
संपादित करें? कोई विकल्प?
नहीं यह महंगा नहीं है। कोड पर एक नज़र डालें। रैंडम क्लास (और अगली INT() विधि) इसे थ्रेड-सुरक्षित बनाने के लिए एटमिक लोंग का उपयोग करती है, और यदि आप एक गैर थ्रेड-सुरक्षित संस्करण को कोड करते हैं तो आप कुछ चक्र सहेज सकते हैं। स्रोत कोड आपकी जेडीके स्थापना निर्देशिका में है ... एक नज़र डालें।
स्रोत
2010-06-26 17:27:06
यह अच्छा होगा अगर आपको यह समझाया जाए कि यह पहली जगह क्यों है। –