2011-07-16 16 views
12

मुझे लगता है कि वे बहुत समान हैं ... और हमें स्टैक या कतार का उपयोग करने की आवश्यकता कब है, क्यों न केवल उन्हें बदलने के लिए ArrayList या LinkedList का उपयोग करें?कतार एक इंटरफ़ेस है जबकि कक्षा एक स्टैक क्यों है?

+1

आपको एक अच्छी डेटा संरचना पुस्तक पढ़नी चाहिए। संक्षेप में: प्रतिबंध प्रदर्शन को बेहतर बना सकते हैं और कोड को समझने की सादगी बढ़ा सकते हैं। –

+2

क्योंकि जावा के डिजाइनर एपीआई पर चूसते हैं। स्टैक ** ** एक इंटरफ़ेस होना चाहिए, इसलिए ढेर के विभिन्न कार्यान्वयन हो सकते हैं। उदाहरण के लिए एक सरणी-सूची आधारित स्टैक और एक लिंक-सूची आधारित स्टैक। इसके बजाए, उन्होंने एक शॉर्टकट और उप-वर्गीकृत वेक्टर को कुछ प्रकार के फ्रैंकन-स्टैक बनाने के लिए लिया जो उसके माता-पिता के बहुत से गलत कार्यान्वयन विवरण का खुलासा करता है। उन्होंने एक डेक (यानी एक और ढेर कार्यान्वयन) बनाकर इसे सही करने का प्रयास किया लेकिन अभी और अधिक भ्रम पैदा किया। –

उत्तर

6

Stack, Vector से प्राप्त वस्तुओं की एक अंतिम-प्रथम-प्रथम-स्टैक है, यह भी एक वर्ग है। Vector जावा के मूल रूप से भेजे गए संग्रहों के "पुराने" सेट के साथ जाता है, और अंततः AbstractCollection से प्राप्त होता है। ध्यान दें, Stack का वास्तव में एक कैननिक कार्यान्वयन है; Queue एस और List के पास कई अच्छी तरह से ज्ञात कार्यान्वयन हैं जो सही तरीके से चुने जाने पर पर्याप्त प्रदर्शन अंतर कर सकते हैं।

Queue दूसरी ओर संग्रह के "नए" सेट से Collection इंटरफ़ेस का पालन करता है जो आमतौर पर उपयोग किए जाते हैं, इसलिए यह इंटरफेस का पालन करता है और विभिन्न कार्यान्वयन के साथ आता है।

Stack एस का उपयोग तब किया जाना चाहिए जब आपको लिफो सेमेटिक्स की आवश्यकता हो, जबकि Queue एस का उपयोग तब किया जाना चाहिए जब आपको फर्स्ट-इन-फर्स्ट-आउट अर्थशास्त्र की आवश्यकता हो।

ArrayList और LinkedList दुकान चीजों की संग्रह का आदेश दिया और Stack या Queue सीधे का उपयोग-मामले के साथ नहीं मिलाया गया है। Stack एस और Queue एस डेटा के अर्थ बफर में हैं, जबकि List के अर्थशास्त्र आमतौर पर ऐसा करते हैं कि यह डेटा की एक दुकान है; Stack या Queue को लागू करने के लिए List का उपयोग करने से आपको कुछ भी रोक नहीं रहा है।

6

ठीक है, एक कारण यह है कि क्विज़ के वेरिएंट हैं जो प्राथमिकता की तरह, स्वैप करने में सक्षम होना सुविधाजनक है। वे एक ही इंटरफ़ेस को पूरा करते हैं लेकिन अलग-अलग व्यवहार करते हैं। मुझे नहीं लगता कि स्टैक्स के लिए ऐसा कुछ भी है, या कम से कम इसका उपयोग लगभग अक्सर नहीं किया जाता है।

आप केवल एक ऐरेलिस्ट का उपयोग करके प्राथमिकता कतार अनुकरण करने में सक्षम नहीं होंगे।

इसके अतिरिक्त, आपके दूसरे प्रश्न के संबंध में, यदि आप अर्थात् का उपयोग कर रहे हैं तो आपको शायद एक स्टैक या कतार का उपयोग करना चाहिए। यही है, अगर आप ग्राफ ट्रैवर्सल जैसे कुछ कर रहे हैं, तो यह आपके द्वारा उपयोग की जा रही डेटा संरचना के बारे में बहुत स्पष्ट होने में मदद करता है।

+0

बहुत बहुत धन्यवाद – Yang

संबंधित मुद्दे