मैंने वास्तव में 2 महीने पहले विषय पर एक ब्लॉग पोस्ट लिखा था। लेख सी # के लिए है, List<T>लेकिन जावा का ArrayListएक समान कार्यान्वयन है। चूंकि ArrayListएक गतिशील सरणी का उपयोग करके कार्यान्वित किया जाता है, इसलिए यह मांग पर आकार में बढ़ जाता है। तो क्षमता निर्माण का कारण अनुकूलन उद्देश्यों के लिए है।
जब इन रेज़िस्टेंस ऑपरेशन में से एक होता है, तो ArrayList सरणी की सामग्री को नए सरणी में कॉपी करता है जो पुराने की क्षमता से दोगुना है। यह ऑपरेशन ओ (एन) समय में चलता है ।
उदाहरण
यहाँ एक उदाहरण दिया गया है कि ArrayListआकार में वृद्धि कैसे होगी:
10
16
25
38
58
... 17 resizes ...
198578
297868
446803
670205
1005308
इसलिए सूची की क्षमता के साथ शुरू होता है 10, जब 11 वीं वस्तु को जोड़ा जाता है, तो इसे बढ़ा दिया 50% + 1जाता है 16। 17 वें आइटम पर ArrayListफिर से 25और इसी तरह बढ़ा दिया जाता है । अब उस उदाहरण पर विचार करें जहाँ हम एक सूची बना रहे हैं जहाँ वांछित क्षमता पहले से ही ज्ञात है 1000000। बनाना ArrayListआकार निर्माता के बिना कॉल करेंगे ArrayList.add 1000000बार जो लेता हे (1) सामान्य रूप से या हे (एन) आकार बदलने पर।
1000000 + 16 + 25 + ... + 670205 + 1005308 = 4015851 संचालन
कंस्ट्रक्टर का उपयोग करके इसकी तुलना करें और फिर कॉलिंग करें ArrayList.addजो ओ (1) में चलने की गारंटी है ।
1000000 + 1000000 = 2000000 ऑपरेशन
जावा बनाम सी #
जावा ऊपर है, शुरू करने 10और प्रत्येक आकार बढ़ाने पर 50% + 1। C # पर शुरू होता है 4और प्रत्येक आवर्तन पर दोगुना अधिक आक्रामक रूप से बढ़ता है। 1000000सी # उपयोगों के लिए ऊपर से एक उदाहरण कहते हैं 3097084आपरेशनों।
संदर्भ