जावा में सूची या मानचित्र पर कॉलिंग आकार() कितना महंगा है? या यदि अक्सर उपयोग किया जाता है तो एक चर में आकार() का मान सहेजना बेहतर होता है?जावा में सूची या मानचित्र पर कॉलिंग आकार() कितना महंगा है?
उत्तर
उत्तर यह है कि यह वास्तविक कार्यान्वयन वर्ग पर निर्भर करता है। कुछ Map
और Collection
कक्षाओं के लिए, size()
एक सस्ता निरंतर समय ऑपरेशन है। दूसरों के लिए, यह सदस्यों की गिनती हो सकती है।
Java Collections Cheatsheet (V2) आमतौर पर इस तरह की जानकारी के लिए एक अच्छा स्रोत है, लेकिन मेजबान सर्वर वर्तमान में थोड़ा बीमार है।
"coderfriendly.com" डोमेन अब और नहीं है, लेकिन मैंने scribd.com पर the cheat-sheet की एक प्रति को ट्रैक किया।
size()
की लागत स्रोत कोड को देखने से भी स्पष्ट होगी। (और यह एक "कार्यान्वयन विस्तार कि" यह बहुत अधिक परिवर्तन नहीं करने के लिए ... मानक संग्रह कक्षाओं के लिए गारंटी है है।)
अनुसरण करे
दुर्भाग्य से, cheatsheet केवल कतार के लिए size
की जटिलता दस्तावेजों कार्यान्वयन।मुझे लगता है कि ऐसा इसलिए है क्योंकि यह अन्य सभी संग्रहों के लिए O(1)
है; @ seanizer का जवाब देखें।
सब कुछ के लिए +1 लेकिन मैं संग्रह Cheatsheet के लिए एक अतिरिक्त +1 देना चाहता हूं (यह वास्तव में महान है) –
आपका लिंक मुझे सभी जगह ले जा रहा है। – DeathByTensors
@DrewBuckley - निश्चित। रिकॉर्ड के लिए, डोमेन नामों के साथ ऐसा होता है जो "पार्क किए गए" होते हैं। –
ArrayList
के लिए कार्यान्वयन की तरह
public int size() {
return lastIndex - firstIndex;
}
तो सिर
आप अपने आवश्यक Impl के लिए विस्तृत जानकारी के लिए स्रोत कोड की जांच कर सकते खत्म नहीं हुआ है।
नोट: स्रोत दिया openjdk
मेरे ऐरेलिस्ट संस्करण 1.56 में यह पहले से ही इसे एक निजी int आकार विशेषता से प्राप्त करता है। – Manny
@ मैनी यह ओपनजेडीके –
आप उस के बारे में ज्यादा चिंता की जरूरत नहीं है से है। सूची कार्यान्वयन आकार का ट्रैक रखता है। कॉल की लागत सिर्फ ओ (1) है। यदि आप बहुत उत्सुक हैं, तो आप संग्रह के ठोस वर्गों के कार्यान्वयन के लिए स्रोत कोड पढ़ सकते हैं और वहां आकार() विधि देख सकते हैं।
आईएमओ का स्रोत है, आपको इसके बारे में चिंता करना चाहिए (सामान्य रूप से), श्लेलेमियल पेंटर एल्गोरिदम? – Ishtar
कार्यान्वयन इसे एक निजी पूर्व-गणना चर से प्राप्त करता है, इसलिए यह महंगा नहीं है।
इसे लागू करें, फिर परीक्षण करें। यदि यह धीमा है, तो एक नजदीक देखो।
"समयपूर्व अनुकूलन सभी बुराइयों की जड़ है।" - डी। Knuth
इसके अलावा: आपको कुछ कार्यान्वयन सुविधाओं की आवश्यकता नहीं होनी चाहिए, खासकर यदि वे काले-बॉक्स वाले हैं। यदि आप बाद में किसी समवर्ती सूची के साथ उस सूची को प्रतिस्थापित करते हैं तो क्या होता है? क्या होगा यदि ओरेकल सूची को फिर से लिखने का फैसला करता है? क्या यह अभी भी तेज होगा? आप बस नहीं जानते
यह * समयपूर्व अनुकूलन * है। Knuth अमेरिकी है :-) –
* "क्या होता है यदि ओरेकल सूची को फिर से लिखने का फैसला करता है?" * (नाइटपिक - संभवतः आप एक सूची कार्यान्वयन वर्ग का मतलब है)। एक 'पुनः' 'ओ' (एन) 'ऑपरेशन बनाने वाला एक पुनःलेख, बड़ी संख्या में अनुप्रयोगों को तोड़ देगा। ओरेकल ऐसा करने के लिए पागल हो जाएगा। माइक्रोसॉफ्ट ओपन-सोर्सिंग विंडोज के रूप में होने की संभावना है। (वास्तव में कम संभावना ...) –
@ स्टीफन सी: आप पूरी तरह से सही हैं, ओरेकल इस तिथि पर ऐरेलिस्ट में आकार() के व्यवहार को बदलने के लिए पागल हो जाएगा (और मैं अभी भी शर्त लगाता हूं कि इस तरह के बदलाव सभी प्रमुखों में हुए हैं कुछ बिंदु पर भाषा प्रयोगशालाएं)। यह इस विशिष्ट उदाहरण में प्रासंगिकता/प्रासंगिक नहीं है। मुख्य मुद्दा कार्यान्वयन का बाद में प्रतिस्थापन है, ArrayList से ConcurrentList, कुछ तृतीय पक्ष सूची या आपके पास क्या है। –
मुझे लगता है कि लिंक्डलिस्ट के कुछ कार्यान्वयन प्रत्येक कॉल के लिए कुल गणना करते हैं। एक विधि के लिए कॉल थोड़ा कर लग सकता है, लेकिन केवल तभी हम बड़े पुनरावृत्तियों या हार्डवेयर के लिए ड्राइवर कोडिंग के बारे में बात कर रहे हैं, यह वास्तव में एक मुद्दा होगा।
किसी भी मामले में, यदि आप इसे स्थानीय चर में सहेजते हैं, तो कोई समस्या नहीं होगी।
List
और Map
इंटरफेस हैं, इसलिए कहना असंभव है। जावा मानक एपीआई में कार्यान्वयन के लिए, आकार आम तौर पर एक क्षेत्र में रखा जाता है और इस प्रकार प्रदर्शन-प्रासंगिक नहीं होता है।
अधिकांश संग्रहों के लिए, size()
पर कॉल करना निरंतर समय का ऑपरेशन है। हालांकि कुछ अपवाद हैं। एक ConcurrentLinkedQueue है। the size() method के जावाडोक से:
सावधान रहें, अधिकांश संग्रहों के विपरीत, यह विधि निरंतर समय संचालन नहीं है। इन कतारों की असीमित प्रकृति के कारण, तत्वों की वर्तमान संख्या को निर्धारित करने के लिए ओ (एन) ट्रैवर्सल की आवश्यकता होती है।
इसलिए मुझे डर है कि कोई सामान्य जवाब नहीं है, आपको अपने द्वारा उपयोग किए जा रहे व्यक्तिगत संग्रह के दस्तावेज़ीकरण की जांच करनी है।
- 1. सर्वर लूप में कॉलिंग समय (एनयूएलएल) कितना महंगा है?
- 2. जावा में .getClass() कितना महंगा है?
- 3. कितना महंगा है Thread.getStackTrace()?
- 4. एसक्यूएल ऑर्डर द्वारा कितना महंगा है?
- 5. .NET प्रतिबिंब कितना महंगा है?
- 6. ऑब्जेक्ट कास्टिंग कितना महंगा है?
- 7. कितना महंगा है ??? - होस्टेड डब्ल्यूसीएफ सेवाएं?
- 8. ओरेकल एंटरप्राइज़ मैनेजर कितना "महंगा" है?
- 9. UITableView के पुनः लोडडेटा कितना महंगा है?
- 10. फ़ाइल गुणों को पढ़ने में कितना महंगा है? .NET
- 11. जावा में आदेश सूची मानचित्र कार्यान्वयन
- 12. सूची में अधिकतम डेटा कितना डेटा रख सकता है?
- 13. node.js/socket.io का उपयोग कर रीयलटाइम बड़े पैमाने पर मल्टीप्लेयर गेम बनाने में कितना महंगा है?
- 14. एक std :: सूची महंगा लौट रहा है?
- 15. कॉलिंग जावा
- 16. पायथन: कई बार एक छोटी सूची बनाने के लिए कितना महंगा है?
- 17. कॉलिंग malloc() और मुक्त() को रखना कितना बुरा है?
- 18. चल रहे JVM पर jstack निष्पादित करने के लिए कितना महंगा है?
- 19. जावा में कॉलिंग विधि ढूंढें
- 20. प्रदर्शन के बिंदु से क्लाउडस्टॉरेज अकाउंट या क्लाउडब्लोब क्लाइंट उदाहरणों का निर्माण कितना महंगा है?
- 21. अधिक महंगा, तुलना या असाइनमेंट क्या है?
- 22. एम फ़ॉन्ट आकार क्या है? पिक्सेल में कितना है?
- 23. जावा में Google मानचित्र पर ऑटो-आकार ज़ूम? (एंड्रॉइड स्क्रीन रिज़ॉल्यूशन के आधार पर)
- 24. एंड्रॉइड - IllegalStateException: मानचित्र का आकार शून्य है
- 25. सूची में मानचित्र दृश्य देखें
- 26. विंडो आकार बदलने पर छवि मानचित्र का आकार बदलें
- 27. कॉलिंग map.fitBounds() Google मानचित्र एपीआई v3.0
- 28. अस्थिर महंगा है?
- 29. जावा में मानचित्र और सूची इंटरफ़ेस दोनों लागू करें?
- 30. फिक्स्ड आकार सूची में
+1 अच्छा क्यूएन निरु – abi1964