लंबे समय पहले मैंने प्रिंसटन Coursera MOOC से एक वीडियो व्याख्यान देखा: एल्गोरिदम का परिचय, जो here पाया जा सकता है। यह ArrayList
को तत्वों को जोड़ने या हटाने के दौरान संरचना की तरह आकार बदलने की लागत बताता है। यह पता चला है कि अगर हम अपनी डेटा संरचना में आकार देने की आपूर्ति करना चाहते हैं तो हम O(n)
से amortized O(n)
add
और remove
संचालन के लिए जाएंगे।जावा ऐरेलिस्ट स्वचालित रूप से क्यों नहीं हटते
मैं कुछ वर्षों से जावा ArrayList
का उपयोग कर रहा हूं। मुझे हमेशा यकीन है कि वे स्वचालित रूप से बढ़ते हैं और कम हो जाते हैं। हाल ही में, मेरे आश्चर्य की बात है, मैं this post में गलत साबित हुआ था। जावा ArrayList
एस सिकुड़ नहीं है (भले ही वे निश्चित रूप से बढ़ते हैं)।
मेरी राय
ArrayList
रों में सिकुड़ कोई नुकसान नहीं है के रूप में प्रदर्शन पहले से हीamortized O(n)
है प्रदान करने में:यहाँ मेरी सवाल कर रहे हैं। जावा रचनाकारों ने इस सुविधा को डिजाइन में क्यों शामिल नहीं किया?
मुझे पता है कि
HashMap
एस जैसी अन्य डेटा संरचनाएं भी स्वचालित रूप से कम नहीं होती हैं। क्या जावा में कोई अन्य डेटा संरचना है जो स्वचालित सिकुड़ने का समर्थन करने वाले सरणी के शीर्ष पर बनाई गई है?अन्य भाषाओं में क्या प्रवृत्तियों हैं? पाइथन/सी # आदि में सूचियों, शब्दकोशों, मानचित्रों, सेटों के मामले में स्वचालित सिकुड़ने जैसा दिखता है। यदि वे जावा के विपरीत दिशा में जाते हैं, तो मेरा प्रश्न है: क्यों?
आपके कंटेनर को कम करने का नकारात्मक पक्ष यह है कि यदि आप अधिक तत्व जोड़ते हैं तो आपको इसे फिर से बढ़ाना होगा। सिर्फ इसलिए कि आपने अपनी सूची से तत्व हटा दिए हैं, लाइब्रेरी यह नहीं मान सकती कि आपको अभी भी अंतरिक्ष की आवश्यकता नहीं है। मुझे 'एरेलेस्टिस्ट' जैसे सरणी रैपर से अवगत नहीं है जो स्वचालित रूप से घटता है, और मैं ऐसा करने के लिए बहुत ही आश्चर्यचकित हूं।यदि आप 'ऐरेलिस्ट' उपयोगकर्ता के रूप में जानते हैं कि आपकी सूची क्षमता अब कम हो सकती है, तो आप ['trimToSize()'] (https://docs.oracle.com/javase/7/docs/api/java/util] का उपयोग कर सकते हैं /ArrayList.html#trimToSize())। – khelwood
मैं समझता हूं कि ऐसा करने के लिए और अधिक काम है, लेकिन 'ओ' शब्दों में, यदि आप वीडियो में प्रस्तुत की तरह स्वचालित सिकुड़ते हैं, तो आप "कुछ नहीं" खो देते हैं। 'Add' और' remove' के लिए जटिलता अभी भी 'am (n) ' – GA1
btw को amortized है, अगर कोई' -1' देता है तो मुझे रचनात्मक प्रतिक्रिया पढ़ना अच्छा लगेगा। – GA1