2013-05-27 12 views
9

मैं इस सरणी में n तत्व के साथ एक ArrayList है कहो, और मैं शुरुआत में एक तत्व जोड़ें:ऐरेलिस्ट की शुरुआत में तत्व जोड़ने की जटिलता क्या है?

myArrayList.add(0,'some value'); 

क्या इस आपरेशन के समय जटिलता हो जाएगा?

Java Doc यह निर्दिष्ट नहीं करता है।

इसके अलावा

मैं सिर्फ जावा सीखना प्रारंभ करें, और मैं क्या समर्थित 'के बारे में यहां मतलब वाक्य

An ArrayList in Java is a List that is backed by an array. 

देखा था? धन्यवाद!

+0

इसका मतलब है कि 'ऐरेलिस्ट' एक कार्यान्वयन है, एक 'सूची' एक इंटरफ़ेस है। –

+0

एक ArrayList तकनीकी रूप से सिर्फ एक सरणी में एक सरणी है। यह तत्वों को जोड़ने और हटाने के लिए System.arraycopy विधि का उपयोग करता है। इस मामले में, यह दो सरणी बनाएगा, एक 0-0 (खाली) से और दूसरा (0-एन) से। इसके बाद यह लंबाई + 1 की एक नई सरणी बनाता है और संबंधित सूचकांक में नए तत्व को डालकर उन्हें एक साथ जोड़ता है। –

उत्तर

16

सरणी शुरू करने के लिए तत्व जोड़ना ओ (एन) है - इसे सभी मौजूदा तत्वों को एक स्थिति में स्थानांतरित करने की आवश्यकता होगी।

एक सरणी सूची में सभी तत्व एक संगत सरणी में संग्रहीत हैं। यदि आप सरणी के वर्तमान आकार की तुलना में अधिक तत्व जोड़ते हैं - यह नए तत्व को समायोजित करने के लिए स्वचालित रूप से उगाया जाएगा।

अंत में जोड़ ओ (1) एकाधिक प्रविष्टियों पर amortized है।

+0

मुझे पता है ओ (एन) सामान्य मामला है, लेकिन मैं वास्तव में पूछ रहा था कि जावा इस मामले में कुछ जादू करता है (लुई वासरमैन जैसा कुछ भी उल्लेख किया गया है)? पर्याप्त स्पष्ट नहीं होने के लिए खेद है! – lakeskysea

+0

आपका क्या मतलब है, "यह मामला"? –

+0

@LouisWasserman क्षमा करें मेरा मतलब है 'यह ऑपरेशन'। यह ऑपरेशन आमतौर पर ओ (एन) लेता है लेकिन मैं सोच रहा था कि क्या जावा के कार्यान्वयन में ऐरेलिस्ट की शुरुआत में तत्व जोड़ने के लिए कुछ 'स्मार्ट तरीका' है। क्या आप अपना उत्तर थोड़ा सा विस्तारित कर सकते हैं क्यों यह रैखिक समय लेता है? – lakeskysea

8

ArrayList.add(0, element) रैखिक समय लेता है, लेकिन स्थिर बहुत कम है, क्योंकि यह तेज तेज System.arraycopy का उपयोग कर सकता है।

0
  • खरोंच से सूची का निर्माण और द्विघात समय में शुरू रन करने के लिए तत्वों के बहुत सारे जोड़ने: O (n)।
  • सूची के अंत में सभी तत्व जोड़ना और फिर Collections.reverse(list) रैखिक समय में चलता है: ओ (एन)।
संबंधित मुद्दे