ऐसा लगता है कि जावा में प्रोग्रामिंग करते समय हम वेक्टरों का उपयोग करने के लिए प्रतीत नहीं होते हैं जब धागे शामिल होते हैं।
आप क्यों को समझने के लिए का उपयोग कर Vector
अधिकांश संदर्भों में एक बुरी बात माना जाता है की जरूरत है। कारण हैं:
Vector
प्रत्येक ऑपरेशन पर सिंक्रनाइज़ करता है। अधिकांश संदर्भों में ठीक-ठीक सिंक्रनाइज़ेशन की आवश्यकता नहीं होती है, और इस तरह यह एक अवांछित प्रदर्शन ओवरहेड है।
Vector.elements()
विधि Enumeration
देता है जिसमें असफल-तेज़ अर्थशास्त्र नहीं होता है।
इसे अपने प्रश्न पर वापस लाएं। विकल्प आपके धागे करने के लिए कोशिश कर रहे हैं पर निर्भर करते हैं: यूज-केस बिल्कुल तुल्यकालन की आवश्यकता नहीं है
हैं, ArrayList
, या LinkedList
का उपयोग करें। आप आमतौर पर इनका उपयोग करेंगे यदि:
- सूची थ्रेड-सीमित है; यानी केवल एक धागा इसे एक्सेस कर सकता है।
- सूची में मोटे अनाज सिंक्रनाइज़ेशन की आवश्यकता है; यानी संचालन के अनुक्रम प्रदर्शन करते समय विशेष पहुंच। इस मामले में, आप आम तौर पर कस्टम क्लास एपीआई में प्रकट नहीं होने वाले एम्बेडेड (कहें)
ArrayList
के साथ एक कस्टम क्लास बनाते हैं।
यूज-केस सुक्ष्म तुल्यकालन की आवश्यकता है, Collections.synchronizedList
आवरण एक Vector
के बराबर है। वैकल्पिक रूप से, आप Vector
के साथ रह सकते हैं और elements()
ऑपरेशन का उपयोग करने से बच सकते हैं।
ए CopyOnWriteArrayList
सूची का लाभ यह है कि इसका पुनरावर्तक समवर्ती संशोधन का समर्थन करता है ... एक अर्थ में। यदि आपका एप्लिकेशन ज्यादातर सूची पढ़ता है तो यह भी बेहतर होता है। पढ़ें ऑपरेशन को स्पष्ट रूप से सिंक्रनाइज़ करने की आवश्यकता नहीं है, और आम तौर पर केवल एक बार volatile
पढ़ने की आवश्यकता होती है। लेकिन फ्लिप पक्ष यह है कि लिखने के संचालन सिंक्रनाइज़ करते हैं, और "सामान्य" ArrayList
की तुलना में काफी महंगा हैं।
और Vector
साथ दूसरी समस्या Collections.synchronizedList
आवरण है कि कुछ उपयोग-मामले मोटे तुल्यकालन की आवश्यकता है, जैसे किसी सूची के आकार का परीक्षण करना और एक सिंक्रनाइज़ ऑपरेशन में सशर्त रूप से तत्व जोड़ना। Queue
और Deque
कक्षाएं उच्च स्तरीय अवशोषण प्रदान करती हैं जो इस तरह की चीज़ से निपटती हैं ... उपयोग-मामलों के लिए एक थ्रेड से दूसरे थ्रेड में असीमित रूप से काम करना शामिल है।
नीचे की रेखा यह है कि एक आकार-फिट-सभी समाधान नहीं है। आपको अपने एप्लिकेशन डिज़ाइन की समवर्ती विशेषताओं को समझने की आवश्यकता है, और तदनुसार अपनी डेटा संरचनाएं चुनें।
अंत में, यदि आप जावा ME के लिए प्रोग्रामिंग कर रहे हैं, तो आप Vector
का उपयोग कर, क्या प्रोफ़ाइल जे 2 एमई आप लक्षित कर रहे हैं पर निर्भर करता के साथ फंस जा सकता है।
स्रोत
2011-03-08 22:41:38
यह 'वेक्टर' के लिए एक अधिक या कम प्लगइन प्रतिस्थापन है। लेकिन यह जरूरी नहीं है कि उपयोग करने के लिए सही बात है। –
धन्यवाद। मुझे अपने कुछ वेक्टरों को सूची में बदलना होगा। – VSH3R