दो डेटा संरचनाओं ArrayList और वेक्टर के बीच अंतर क्या हैं , और आपको उनमें से प्रत्येक का उपयोग कहां करना चाहिए?
Vector v = new Vector(3, 2);
दो डेटा संरचनाओं ArrayList और वेक्टर के बीच अंतर क्या हैं , और आपको उनमें से प्रत्येक का उपयोग कहां करना चाहिए?
Vector v = new Vector(3, 2);
जवाबों:
मतभेद
यदि वैक्टर का उपयोग करने की कोई विशेष आवश्यकता नहीं है, तो ArrayLists का उपयोग करें।
तादात्म्य
यदि कई सूत्र एक ArrayList को समवर्ती रूप से एक्सेस करते हैं, तो हमें बाह्य रूप से कोड के ब्लॉक को सिंक्रनाइज़ करना होगा जो सूची को संरचनात्मक रूप से संशोधित करता है या बस एक तत्व को संशोधित करता है। संरचनात्मक संशोधन का अर्थ है सूची से तत्व (ओं) को जोड़ना या हटाना। किसी मौजूदा तत्व का मान सेट करना एक संरचनात्मक संशोधन नहीं है।
Collections.synchronizedList
आम तौर पर सूची के निर्माण के समय उपयोग किया जाता है ताकि सूची में किसी भी आकस्मिक असम्बद्ध उपयोग से बचा जा सके।
डेटा की वृद्धि
आंतरिक रूप से, ArrayList और वेक्टर दोनों एक Array का उपयोग करके अपनी सामग्री पर पकड़ रखते हैं। जब एक तत्व को एक ArrayList या वेक्टर में डाला जाता है, तो ऑब्जेक्ट को कमरे से बाहर चलाने पर अपने आंतरिक सरणी का विस्तार करने की आवश्यकता होगी। एक वेक्टर अपने सरणी के आकार को दोगुना करने के लिए चूकता है, जबकि ArrayList अपने सरणी आकार को 50 प्रतिशत बढ़ाता है।
जैसा कि प्रलेखन कहता है, ए Vector
और ए ArrayList
लगभग बराबर हैं। अंतर यह है कि एक तक पहुँच को Vector
सिंक्रनाइज़ किया जाता है, जबकि एक तक पहुंच ArrayList
नहीं है। इसका मतलब यह है कि Vector
एक समय में केवल एक धागा तरीकों को कॉल कर सकता है , और लॉक प्राप्त करने में एक मामूली ओवरहेड है; यदि आप एक का उपयोग करते हैं ArrayList
, तो यह मामला नहीं है। आम तौर पर, आप एक का उपयोग करना चाहते हैं ArrayList
; एकल-थ्रेडेड मामले में यह एक बेहतर विकल्प है, और बहु-थ्रेडेड मामले में, आपको लॉकिंग पर बेहतर नियंत्रण मिलता है। समवर्ती पठन की अनुमति देना चाहते हैं? ठीक। दस लिखने के एक बैच के लिए एक तुल्यकालन प्रदर्शन करना चाहते हैं? भी ठीक। यह आपके अंत पर थोड़ी अधिक देखभाल की आवश्यकता है, लेकिन यह संभावना है कि आप क्या चाहते हैं। यह भी ध्यान दें कि यदि आपके पास एक ArrayList है, तो आप इसका उपयोग कर सकते हैंCollections.synchronizedList
एक सिंक्रनाइज़ सूची बनाने के लिए फ़ंक्शन, इस प्रकार आप एक के बराबर हो रही है Vector
।
Vector
एक टूटा हुआ वर्ग है जो थ्रेडसेफ़ नहीं है , इसके बावजूद इसे "सिंक्रनाइज़" किया जाता है और इसका उपयोग केवल छात्रों और अन्य अनुभवहीन प्रोग्रामर द्वारा किया जाता है।
ArrayList
पेशेवरों और अनुभवी प्रोग्रामरों द्वारा उपयोग की जाने वाली सूची-सूची है।
थ्रेडसेफ़ सूची कार्यान्वयन के इच्छुक पेशेवर इसका उपयोग करते हैं CopyOnWriteArrayList
।
Vector
का इरादा थ्रेडसेफ़ था , लेकिन इसमें एक डिज़ाइन दोष है जो इसे बनाता है * वास्तव में थ्रेडसेफ़ नहीं, यह मूल रूप से एक पदावनत वर्ग है। किसी कारण से, विश्वविद्यालयों आदि ने इस खबर के बारे में नहीं सुना है और अभी भी इसके उपयोग की वकालत करते हैं।
ArrayList
नया है और 20-30% तेज है।
यदि आपको कुछ स्पष्ट रूप से स्पष्ट नहीं है Vector
, तो उपयोग करेंArrayList
20-30% faster
?
वेक्टर और एरेइलिस्ट के बीच 2 प्रमुख भेदभाव हैं।
वेक्टर डिफ़ॉल्ट रूप से सिंक्रनाइज़ है, और ArrayList नहीं है। नोट: आप ArrayList को भी संग्रहित ऑब्जेक्ट द्वारा संग्रहित करके संग्रहित कर सकते हैं। SynchronizedList () विधि। सिंक्रोनाइज़्ड साधन: इसका उपयोग किसी भी साइड इफेक्ट के साथ कई थ्रेड्स के साथ किया जा सकता है।
ArrayLists पिछले आकार का 50% बढ़ जाता है जब अंतरिक्ष नए तत्व के लिए पर्याप्त नहीं होता है, जहां वेक्टर पिछले आकार के 100% तक बढ़ जाएगा जब नए आने वाले तत्व के लिए कोई स्थान नहीं होता है।
इसके अलावा, प्रोग्रामिंग प्रयास के संदर्भ में, उनके बीच कुछ व्यावहारिक अंतर हैं:
कब कौन सा उपयोग करें?
नोट : भले ही सरणीसूची 100% बढ़ती है, आप यह सुनिश्चित करने के लिए इसे सुनिश्चित कर सकते हैं () विधि यह सुनिश्चित करने के लिए कि आप प्रारंभिक चरणों में ही पर्याप्त मेमोरी आवंटित कर रहे हैं।
आशा है ये मदद करेगा।
ArrayList
और Vector
दोनों सूची इंटरफ़ेस को लागू करता है और प्रविष्टि क्रम को बनाए रखता है। लेकिन इसके ArrayList
और Vector
वर्गों के बीच कई अंतर हैं ...
ArrayList
सिंक्रनाइज़ नहीं है।ArrayList
यदि तत्व की संख्या उसकी क्षमता से अधिक है, तो वर्तमान सरणी आकार का 50% बढ़ जाता है।ArrayList
एक विरासत वर्ग नहीं है, इसे JDK 1.2 में पेश किया गया है।ArrayList
तेज है क्योंकि यह गैर-सिंक्रनाइज़ है।ArrayList
तत्वों को पार करने के लिए Iterator इंटरफ़ेस का उपयोग करता है।वेक्टर -
Vector
सिंक्रनाइज़ किया गया है।Vector
वेतन वृद्धि 100% का मतलब है सरणी आकार दोगुना अगर तत्व की कुल संख्या इसकी क्षमता से अधिक है।Vector
एक विरासत वर्ग है।
Vector
यह धीमा है क्योंकि यह सिंक्रनाइज़ किया गया है यानी मल्टीथ्रेडिंग वातावरण में, यह थ्रेडेबल या गैर-रननीय अवस्था में अन्य थ्रेड्स को तब तक रखेगा जब तक कि वर्तमान थ्रेड ऑब्जेक्ट का लॉक रिलीज़ नहीं करता है।
Vector
तत्वों को पार करने के लिए गणना इंटरफ़ेस का उपयोग करता है। लेकिन यह इटरेटर का भी उपयोग कर सकता है।
इसे भी देखें: https://www.javatpoint.com/difference-between-arraylist-and-vector
मूल रूप से दोनों ArrayList और वेक्टर दोनों आंतरिक वस्तु सरणी का उपयोग करते हैं।
ArrayList: ArrayList वर्ग AbstractList का विस्तार करता है और सूची इंटरफ़ेस और RandomAccess (मार्कर इंटरफ़ेस) को लागू करता है। ArrayList डायनेमिक सरणियों का समर्थन करता है जो आवश्यकतानुसार बढ़ सकता है। यह हमें पहले तत्वों पर पुनरावृत्ति देता है। ArrayList आंतरिक वस्तु सरणी का उपयोग करता है; वे 10 के डिफ़ॉल्ट प्रारंभिक आकार के साथ बनाए जाते हैं। जब यह आकार पार हो जाता है, तो संग्रह स्वचालित रूप से डिफ़ॉल्ट आकार के आधे तक बढ़ जाता है जो कि 15 है।
वेक्टर: वेक्टर ArrayList के समान है, लेकिन अंतर हैं, यह सिंक्रनाइज़ है और इसका डिफ़ॉल्ट प्रारंभिक आकार 10 है और जब आकार इसके आकार से अधिक हो जाता है तो मूल आकार का दोगुना हो जाता है अर्थात नया आकार 20 होगा। वेक्टर एकमात्र वर्ग है RandomAccess को लागू करने के लिए ArrayList के अलावा अन्य। वेक्टर में चार कंस्ट्रक्टर होते हैं, जिसमें से दो पैरामीटर लेते हैं वेक्टर (int initialCapacity, int कैपेसिटी इंक्रीमेंट) क्षमता Increment वह राशि है जिसके द्वारा वेक्टर के ओवरफ्लो होने पर क्षमता बढ़ जाती है, इसलिए इसका लोड फैक्टर पर अधिक नियंत्रण होता है।
कुछ अन्य अंतर हैं: