मुझे किसी सूची में बड़ी संख्या में तत्व (500k या तो) रखने की आवश्यकता है या एक सेट जो मुझे उच्च प्रदर्शन ट्रैवर्सल, जोड़ और हटाने की आवश्यकता है। यह एक बहुप्रचारित वातावरण में किया जाएगा और मुझे कोई परवाह नहीं है कि क्या मुझे ट्रैवर्सल शुरू होने के बाद किए गए अपडेट देखने को मिलते हैं (कमजोर रूप से सुसंगत), इस परिदृश्य के लिए जावा संग्रह क्या सही है?इस मामले में उपयोग करने के लिए सही जावा संग्रह क्या है?
उत्तर
डुप्लिकेट आइटम की अनुमति है?
हाँ है, सेट का उपयोग नहीं किया जा सकता है। आप अन्यथा सॉर्टेडसेट का उपयोग कर सकते हैं।
तत्वों को सॉर्ट करने से जोड़ने/हटाने पर नकारात्मक प्रभाव पड़ेगा। और यहां आदेश की आवश्यकता नहीं है। – Nicolas
यदि ट्रैवर्सल == पढ़ा गया है, और == अपडेट जोड़ें/निकालें, तो मैं कहूंगा कि अक्सर यह नहीं होता कि एक ही संग्रह दोनों परिचालनों के लिए अनुकूलित किया जाता है।
लेकिन आपकी सबसे अच्छी शर्त HashMap होने की संभावना है।
हैश मैप ट्रैवर्सल – bestsss
के लिए * खराब * जैसा मैंने कहा, कुछ भी इष्टतम नहीं है। – duffymo
java.util.HashMap (इसे थ्रेड सुरक्षित नहीं है) ट्रैवर्सल के लिए बस खराब है, यह एक लिंक की गई सूची को पार करने से भी बदतर है, जिसमें बहुत खराब (सीपीयू) कैशिंग विशेषताएं हैं [आजकल बहुत सारे एल्गोरिदम प्रदर्शन कैश-मिस द्वारा नियंत्रित होते हैं प्रवण वे हैं]। LinkedHashMap उस संबंध में थोड़ा बेहतर है लेकिन थ्रेड असुरक्षित भी है। – bestsss
यहाँ अपने आवेदन के आधार पर एक संग्रह का चयन करने पर एक बहुत अच्छा लेख है
आप इस रूप में अच्छी तरह
http://www.javamex.com/tutorials/collections/how_to_choose.shtml
थ्रेड कोशिश कर सकते हैं - तो j.u.concurrent को देखो। शायद ConcurrentHashMap सेट के रूप में उपयोग किया जाता है - उदा। जोड़ने (x) के बजाय put (x, x) का उपयोग करें।
यदि आप अक्सर जोड़ते और हटाते हैं, तो कुछ "लिंक" शायद सबसे अच्छा विकल्प है। इस तरह जब भी आप केवल एक इंडेक्स को जोड़ते/हटाते हैं, उसे एक ऐरेलिस्ट के विपरीत अद्यतन किया जाना चाहिए, उदाहरण के लिए जहां पूरे ऐरे को "स्थानांतरित" किया जाना है। समस्या यह है कि आप संग्रह के पवित्र अंगूर के लिए पूछ रहे हैं।
the Concurrent Collections पर एक नज़र डालने से मदद मिल सकती है।
लेकिन "ट्रैवर्सल" से आपका क्या मतलब है?
हालांकि इसके सूचकांक द्वारा इस तरह के संग्रह तक पहुंचने से सावधान रहें। – Qwerky
ट्रैवर्सल संग्रह के दौरान मेरी स्थिति में संग्रह के तत्वों (जैसे उदाहरण के लिए foreach loops में) पर जा रहा है, मैं संग्रह को संशोधित नहीं करता हूं। ArrayList काम नहीं करेगा क्योंकि एकाधिक धागे से एक्सेस होने पर उन्हें सिंक्रनाइज़ करने की आवश्यकता है। –
यदि आपको किसी सूची के मध्य में आइटम को जोड़ने या निकालने की आवश्यकता है, तो लिंक्डलिस्ट एक अच्छी पसंद है। बहु-क्रम वातावरण में इसका इस्तेमाल करने के लिए, तो आप इसे इस सिंक्रनाइज़ करने की आवश्यकता:
List l = Collections.synchronisedList(new LinkedList());
जब तक आप पूरे ट्रैवर्स को सिंक्रनाइज़ नहीं करते हैं, तब तक आप इसे पार नहीं कर सकते हैं, जो प्रत्येक नोड पर 500k और लगभग गारंटीकृत कैश-मिस के लिए एक भयानक विचार है। – bestsss
मैं या किसी सूची में तत्वों (500k या तो) की एक बड़ी संख्या एक सेट मैं क्या करने की जरूरत धारण करने के लिए की जरूरत है उच्च प्रदर्शन ट्रैवर्सल, जोड़ और हटाने। ... यह एक बहु-क्रम पर्यावरण
ConcrrentSkipListMap में किया जाएगा - यह एक सूची नहीं है, लेकिन सूची अर्थ विज्ञान समवर्ती वातावरण में व्यावहारिक रूप से बेकार हैं। यह तत्व एक पेड़ एक जैसे संरचना में सॉर्ट और हैशिंग माध्यम से सुलभ नहीं होगा, तो आप कुछ प्राकृतिक आदेश (या तुलनित्र के माध्यम से बाहरी) की जरूरत है ताकि
आप केवल जोड़ने की जरूरत है/एक पंक्ति के सिरों पर हटाने - ConcurrentLinkedQueue।
सिंक्रनाइज़ संग्रह बहु-थ्रेडेड वातावरण के लिए उपयुक्त नहीं हैं यदि आप यहां तक कि मध्यम विवाद की अपेक्षा करते हैं।उन्हें पूरे ट्रैवर्स ऑपरेशन के दौरान भी पूर्ण लॉक होल्डिंग की आवश्यकता होती है। मैं या तो ConcurrentHashMap के खिलाफ सलाह देंगे।
अंत में: आप 64+ की तरह वास्तविक बहु सीपीयू के लिए जा रहे हैं और उच्च विवाद की उम्मीद है और प्राकृतिक आदेश कड़ी का अनुसरण नहीं करना चाहते हैं: डेटा के बड़े आकार के कारण, http://sourceforge.net/projects/high-scale-lib
एक ConcurrentHashMap द्वारा समर्थित सेट के बारे में, इस स्थिति में ConcurrentHashMap के विरुद्ध क्यों। EX। Collections.newSetFromMap (नया ConcurrentHashMap <ऑब्जेक्ट, बूलियन>()); –
दूसरी ओर क्या डेटाबेस में डेटा स्टोर करना संभव है? और कैश के रूप में स्मृति संग्रह का उपयोग करें।
क्या आप विस्तारित कर सकते हैं, मुझे समझ में नहीं आता कि यह मेरी समस्या को हल करता है। –
- 1. इस मामले में "&" का क्या अर्थ है?
- 2. क्या यह एकाधिक संग्रह लोड करने के लिए ThenFetch() का उपयोग करने का सही तरीका है?
- 3. पर्ल इस मामले में धक्का देने के लिए इस तर्क के साथ क्या कर रहा है?
- 4. मैं इस मामले में फीचर ईर्ष्या कैसे सही करूं?
- 5. एक ड्रोपल देखें इस उपयोग के मामले के लिए उपयोगी
- 6. क्या इस मामले में सार्वजनिक जावा क्लास के सदस्यों के लिए बुरा व्यवहार होगा?
- 7. क्या इस मामले में नोडा-टाइम लागू है?
- 8. कोरआउट के लिए उपयोग-मामले क्या हैं?
- 9. पायथन के __new__ के लिए उपयोग के मामले क्या हैं?
- 10. संग्रह हटाएं सभी अनदेखा मामले?
- 11. प्रदर्शन के मामले में बेहतर क्या है?
- 12. 'इस' के 4 अलग-अलग परिदृश्य। सही व्याख्या क्या है?
- 13. जावा में संग्रह .checkedList() कॉल क्या है?
- 14. बड़ी संख्या में डीटीओ को पुनः प्राप्त करने के लिए सबसे तेज़ जावा संग्रह क्या है?
- 15. जावा में प्रमाणीकृत एन्क्रिप्शन करने का सही तरीका क्या है?
- 16. इस मामले में मुझे सही डेटा प्रकार का उपयोग करना चाहिए?
- 17. घड़ी_टी प्रिंट करने के लिए printf का उपयोग करने का सही तरीका क्या है?
- 18. टेम्पलेट में टाइपनाम के लिए नाम घोषित करने के उपयोग के मामले क्या हैं?
- 19. किसी XML फ़ाइल में दिनांक/समय के लिए उपयोग करने के लिए सही प्रारूप क्या है
- 20. सी: बाइट्स में फ़ाइल आकारों के लिए उपयोग करने के लिए सही डेटा प्रकार क्या है?
- 21. इस मामले में एक परिपत्र संदर्भ जांच के लिए एक अच्छा एल्गोरिदम क्या होगा?
- 22. इस मामले में BufferedReader का उपयोग क्यों करें?
- 23. PHPStorm: ऑब्जेक्ट्स के संग्रह के लिए सही PHPDoc?
- 24. व्यापार परत के भीतर कार्य/डेटा संग्रह स्थान की इकाई का उपयोग करने के लिए सही तरीका क्या है?
- 25. क्या मेरे मामले में विस्तार विधियों का उपयोग करना सही है?
- 26. जावा जेनरिक के इस उपयोग का क्या अर्थ है?
- 27. सिंक्रूट पैटर्न पर कुछ स्पष्टीकरण: इस पैटर्न का उपयोग करने का सही तरीका क्या है?
- 28. जावा संग्रह: किस संग्रह का उपयोग करने के लिए और कब?
- 29. vi के लिए सामान्य उपयोग के मामले क्या हैं?
- 30. ThreadPool.QueueUserWorkItem उपयोग के मामले
ट्रैवर्सल या हमेशा शुरुआत/अंत में होने के दौरान अतिरिक्त और निष्कासन होता है? क्या यह प्रत्येक ट्रैवर्सल के दौरान होता है? –
@ माइकल बोर्गवर्ड, यह एक बहुत ही अच्छी टिप्पणी है – bestsss
एक या कई धागे तत्वों को जोड़/निकाल सकते हैं जबकि अन्य धागे संग्रह पर जा रहे हैं। यही कारण है कि मुझे एक कमजोर संगत संग्रह की आवश्यकता है। –