कंटेनर (सार डेटा प्रकार)

कंप्यूटर विज्ञान में, एक कंटेनर एक वर्ग (कंप्यूटर विज्ञान) या डेटा संरचना है जिनके उदाहरण अन्य वस्तुओं का संग्रह हैं। दूसरे शब्दों में, वे वस्तुओं को एक संगठित तरीके से संग्रहीत करते हैं जो विशिष्ट पहुंच नियमों का पालन करते हैं।

कंटेनर का आकार इसमें शामिल वस्तुओं (तत्वों) की संख्या पर निर्भर करता है। विभिन्न कंटेनर प्रकारों के अंतर्निहित (विरासत में मिले) कार्यान्वयन आकार, जटिलता और भाषा के प्रकार में भिन्न हो सकते हैं, लेकिन कई मामलों में वे किसी भी परिदृश्य के लिए सही कार्यान्वयन को चुनने में लचीलापन प्रदान करते हैं।

कंटेनर डेटा संरचनाएं आमतौर पर कई प्रकार की प्रोग्रामिंग भाषाओं में उपयोग की जाती हैं।

कार्य और गुण
कंटेनरों को निम्नलिखित तीन गुणों द्वारा चित्रित किया जा सकता है:
 * पहुंच, यानी कंटेनर की वस्तुओं तक पहुंचने का तरीका। सरणियों के मामले में, ऐरे इंडेक्स के साथ एक्सेस किया जाता है। ढेर के मामले में, एलआईएफओ (कंप्यूटिंग) (आखिरी में, पहले बाहर) क्रम के अनुसार पहुंच की जाती है और कतारों के मामले में यह फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स) (पहले अंदर, पहले बाहर) आदेश के अनुसार किया जाता है ;
 * भंडारण, यानी कंटेनर की वस्तुओं को संग्रहित करने का तरीका;
 * ट्रैवर्सल, यानी कंटेनर की वस्तुओं को पार करने का तरीका।

निम्नलिखित करने के लिए कंटेनर कक्षाओं से CRUD जैसी विधियों को लागू करने की अपेक्षा की जाती है:
 * एक खाली कंटेनर (कंस्ट्रक्टर) बनाएं;
 * वस्तुओं को कंटेनर में डालें;
 * कंटेनर से वस्तुओं को हटा दें;
 * कंटेनर में सभी वस्तुओं को हटा दें (स्पष्ट);
 * कंटेनर में वस्तुओं तक पहुंचें;
 * कंटेनर में वस्तुओं की संख्या तक पहुँचें (गिनती)।

कंटेनरों को कभी-कभी पुनरावृत्तियों के संयोजन में लागू किया जाता है।

प्रकार
कंटेनरों को सिंगल-वैल्यू कंटेनर या सहयोगी कंटेनर के रूप में वर्गीकृत किया जा सकता है।

सिंगल-वैल्यू कंटेनर प्रत्येक ऑब्जेक्ट को स्वतंत्र रूप से स्टोर करते हैं। भाषा लूप निर्माण (जैसे लूप के लिए) या पुनरावर्तक के साथ वस्तुओं को सीधे एक्सेस किया जा सकता है।

एक साहचर्य कंटेनर कुंजी-मूल्य जोड़े से बना एक साहचर्य सरणी, मानचित्र या शब्दकोश का उपयोग करता है, जैसे कि प्रत्येक कुंजी कंटेनर में अधिकतम एक बार दिखाई देती है। कुंजी का उपयोग मूल्य, वस्तु को खोजने के लिए किया जाता है, यदि यह कंटेनर में संग्रहीत है। साहचर्य कंटेनरों का उपयोग प्रोग्रामिंग भाषाओं में क्लास टेम्प्लेट के रूप में किया जाता है।

कंटेनर सार डेटा प्रकारों में शामिल हैं:


 * कतार (सार डेटा प्रकार)
 * ढेर (सार डेटा प्रकार)
 * प्राथमिकता कतारें
 * तालिका देखो (LUTs)
 * साहचर्य सरणी | कुंजी-संबद्ध डेटा संरचनाएं
 * सेट (सार डेटा प्रकार), मूल्य या विशिष्ट संपत्ति द्वारा वस्तुओं को युक्त और अनुक्रमित करना;
 * मानचित्र (कंप्यूटर विज्ञान), प्रत्येक कुंजी को लुकअप के लिए एक मान से संबद्ध करता है

इन सार प्रकारों को लागू करने के लिए उपयोग की जाने वाली सामान्य डेटा संरचनाओं में शामिल हैं:
 * सरणी डेटा संरचना और उनके डेरिवेटिव
 * लिंक्ड सूचियाँ
 * बाइनरी सर्च ट्री (BSTs), विशेष रूप से सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री | सेल्फ-बैलेंसिंग BSTs
 * हैश तालिका

ग्राफिक कंटेनर
विजेट टूलकिट कंटेनर का भी उपयोग करते हैं, जो अन्य विजेट जैसे विंडो (कंप्यूटिंग), पैनल (कंप्यूटर सॉफ्टवेयर) को समूहित करने के लिए विशेष विजेट (कंप्यूटिंग) हैं। उनके ग्राफिकल गुणों के अलावा, उनके पास कंटेनर कक्षाओं के समान व्यवहार है, क्योंकि वे अपने बच्चों के विजेट (कंप्यूटिंग) की एक सूची रखते हैं, और अपने बच्चों के बीच विजेट (कंप्यूटिंग) को जोड़ने, हटाने या पुनर्प्राप्त करने की अनुमति देते हैं।

वैधानिक रूप से टाइप की गई भाषाओं में
कंटेनर एब्सट्रैक्शन वस्तुतः किसी भी प्रोग्रामिंग लैंग्वेज में लिखा जा सकता है, चाहे उसका टाइप सिस्टम कुछ भी हो। हालांकि, मजबूत और कमजोर टाइपिंग|दृढ़ता से टाइप की गई वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में एक डेवलपर के लिए पुन: प्रयोज्य सजातीय कंटेनर लिखना कुछ जटिल हो सकता है।

तत्व प्रकारों में अंतर के कारण यह प्रत्येक मौलिक प्रकार के लिए लिखने और कंटेनरों का संग्रह रखने की एक कठिन प्रक्रिया में परिणत होता है। कई तात्विक प्रकार (जैसे पूर्णांक या फ्लोटिंग नंबर) एक दूसरे के साथ स्वाभाविक रूप से असंगत होते हैं क्योंकि वे स्मृति आकार और उनके अर्थपूर्ण अर्थ के कारण होते हैं और इसलिए विभिन्न कंटेनरों की आवश्यकता होती है (बेशक, वे पारस्परिक रूप से संगत या परिवर्तनीय हैं)। आधुनिक प्रोग्रामिंग भाषाएँ समस्या को हल करने में मदद करने के लिए विभिन्न दृष्टिकोण प्रदान करती हैं:
 * यूनिवर्सल बुनियादी प्रकार
 * एक प्रकार जो सार्वभौमिक रूप से किसी अन्य (जैसे रूट ऑब्जेक्ट क्लास) द्वारा असाइन किया जा सकता है।
 * डाउनकास्टिंग;
 * कक्षा प्रतिस्थापन
 * कमजोर टाइप की गई भाषाओं के लिए उपरोक्त पिछले तीन दृष्टिकोणों का उपयोग किया जाता है; ये आमतौर पर वंशानुक्रम और बहुरूपता को प्रकारों द्वारा साझा करते हैं।
 * संघ प्रकार (C/C++ भाषा)
 * विभिन्न प्रकार के डेटा आकारों के भंडारण की अनुमति देता है; हालांकि, यह सुनिश्चित करना कठिन है कि पुनर्प्राप्ति पर संघ में किस प्रकार का संग्रह किया जाता है और इसका सावधानीपूर्वक पालन किया जाना चाहिए।
 * प्रकार रूपांतरण
 * टेम्पलेट (सी ++)C++)s या सामान्य प्रोग्रामिंग
 * पुन: प्रयोज्यता और प्रकार की सुरक्षा सुनिश्चित करता है; रिवर्स विरासत के रूप में सोचा जा सकता है। हालांकि, इस दृष्टिकोण को एक टेम्पलेट विशेषज्ञता को लागू करने की आवश्यकता हो सकती है जो प्रतिष्ठित रूप से एक समय लेने वाली प्रक्रिया है जो उनके तरीकों में भिन्न होती है।

यह भी देखें

 * डेटा संरचनाओं की सूची
 * मानक टेम्प्लेट लाइब्रेरी#कंटेनर
 * संग्रह (सार डेटा प्रकार)
 * ढेर (डेटा संरचना)
 * जावा समवर्ती मानचित्र

बाहरी संबंध

 * Container Data Structure Declaration and Initialization

Ujo Container (programação) Wisina