जावा संग्रह फ्रेमवर्क

जावा संग्रह फ्रेमवर्क वर्गो और इंटरफ़ेस का एक समूह है जो सामान्यतः पुन: प्रयोज्य संग्रह निर्दिष्ट फ्रेमवर्कओं को कार्यान्वित करता है। हालांकि इसे एक फ्रेमवर्क के रूप में जाना जाता है, यह एक लाइब्रेरी के रूप में काम करता है। संग्रह फ्रेमवर्क दोनों इंटरफेस प्रदान करता है जो विभिन्न संग्रहों और उन्हें लागू करने वाले वर्गो को कार्यान्वित करता है।

सरणियों से अंतर
संग्रह और सरणियाँ समान हैं कि वे दोनों वस्तुओं से सम्बन्ध रखती हैं और उन्हें एक समूह के रूप में व्यवस्थित किया जा सकता है। हालाँकि, सरणियों के विपरीत, संग्रह को स्थापित होने पर एक निश्चित क्षमता निर्दिष्ट करने की आवश्यकता नहीं होती है। वस्तुओं को जोड़े या हटाए जाने पर संग्रह स्वचालित रूप से परिमाण में बढ़ या घट सकते हैं। संग्रह में मूल आंकड़ों के प्रकार (प्राथमिक प्रकार) जैसे पूर्णांक, दीर्घ या युग्मित के सिद्धांत सम्मिलित नहीं हो सकते; इसके बजाय,उनके पास  पूर्णांक, दीर्घ या युग्मित जैसे आवरण वर्ग हैं।

विवरण
जावा प्लेटफॉर्म के पूर्व जेडीके 1.2 संस्करणों मे संग्रह कार्यान्वयन में कुछ आंकड़े फ्रेमवर्क वर्ग सम्मिलित थे, लेकिन इसमें संग्रह फ्रेमवर्क सम्मिलित नहीं थी। जावा वस्तुओं क़ा समूहीकरण करने के लिए मानक क्रम सारणी, सदिश और द्रुतान्वेषण सारणी वर्गो के माध्यम से थी, जिसका विस्तार करना दुर्भाग्य से आसान नहीं था, और एक मानक सदस्य इंटरफ़ेस को कार्यान्वित नहीं करता । पुन: प्रयोज्य संग्रह आंकड़े फ्रेमवर्कओं की आवश्यकता को पूरा करने के लिए, कई स्वतंत्र रूपरेखाएँ विकसित की गईं, डौग ली के संग्रह संकुल में सबसे ज्यादा उपयोग किया जा रहा है, और वस्तुस्थान व्यापक संग्रह लाइब्रेरी (जेजीएल), जिसका मूल उद्देश्य सी++ मानक आदर्श लाइब्रेरी (एसटीएल) के साथ सामंजस्य करना था। संग्रह की रूपरेखा मुख्य रूप से जोशुआ बलोच द्वारा परिकल्पित और विकसित किया गया था, और जेडीके 1.2 में प्रस्तावित किया गया था। इसने डौग ली के संग्रह संकुल से कई विचारों और वर्गो का पुन: उपयोग किया, जिसके परिणामस्वरूप इसे हटा दिया गया था। सन माइक्रोसिस्टम्स ने जेजीएल के विचारों का उपयोग नहीं करने का निर्णय किया, क्योंकि वे एक संक्षिप्त रूपरेखा चाहते थे, और सी++ के साथ निरंतरता उनके उद्देश्यों में से एक नहीं थी। डौग ली ने बाद में एक समरूपता संकुल विकसित किया, जिसमें संग्रह से संबंधित नए वर्ग सम्मिलित थे। इन समवर्ती उपयोगिताओं का एक अद्यतन संस्करण जेडीके 5.0 में जेएसआर 166 के रूप में सम्मिलित किया गया था।

स्थापत्य
जावा में लगभग सभी संग्रह java.util.Collection इंटरफ़ेस से प्राप्त होते हैं। एक संग्रह सभी संग्रहों के मूल भागों को परिभाषित करता है। इंटरफ़ेस संग्रह में जोड़ने और निकालने के लिए क्रमशः ऐड और रिमूव  पद्धतियाें को बताता है। यह भी आवश्यक है toArray  पद्धति, जो संग्रह को संग्रह में सभी अंगों को एक साधारण सरणी में परिवर्तित करती है। अंत में, wasContent  पद्धति जाँचती है कि संग्रह में कोई विस्तृत अंग है या नहीं। संग्रह इंटरफ़ेस java.lang.Iterable का उप-इंटरफ़ेस है, इसलिए कोई भी संग्रह प्रत्येक कथन का लक्ष्य हो सकता है। (पुनरावर्तनीय इंटरफ़ेस प्रत्येक कथन के लिए उपयोग की जाने वाली पुनरावर्तक  पद्धति प्रदान करता है।) सभी संग्रहों में एक पुनरावर्तक होता है जो संग्रह के सभी अंगों के माध्यम से जाता है। इसके अतिरिक्त, संग्रह एक सामान्य है। किसी भी वर्ग को संचय करने के लिए कोई भी संग्रह लिखा जा सकता है। उदाहरण के लिए, संग्रह <शृंखला> शृंखला को नियन्त्रित कर सकती है, और संग्रह के अंगों को संचकन के बिना शृंखला के रूप में उपयोग किया जा सकता है। ध्यान दें कि कोणीय कोष्ठकों < > में एक प्रकार की युक्ति हो सकती है जो निर्दिष्ट करती है कि संग्रह किस प्रकार का है।

संग्रह के तीन प्रकार
संग्रह सामान्य तीन प्रकार के हैं: आदिष्ट सूचियाँ, शब्दकोश/मानचित्र और समूह।

आदिष्ट सूचियाँ प्रोग्रामर को एक निश्चित क्रम में वस्तुओं को सम्मिलित करने और उसी क्रम में उन वस्तुओं को पुनः प्राप्त करने की अनुमति देती हैं। एक उदाहरण प्रतीक्षा सूची है। आदिष्ट सूचियों के लिए आधार इंटरफेस को सूची और पंक्ति कहा जाता है।

शब्दकोश/मानचित्र वस्तु के मान तक पहुँचने के लिए एक लुकअप कुंजी के साथ वस्तुओं के निर्देशों को संग्रहीत करते हैं। कुंजी का एक उदाहरण एक पहचान पत्र है। शब्दकोशों/मानचित्र के लिए आधार इंटरफेस को मानचित्र कहा जाता है।

समूह अनियंत्रित संग्रह होते हैं जिन्हें पुनरावृत्त किया जा सकता है और प्रत्येक अंग को एक समय में सम्मिलित किया जा सकता है। सेट के लिए आधार इंटरफ़ेस को समूह कहा जाता है।

सूची इंटरफ़ेस
सूचियाँ java.util.List इंटरफ़ेस के माध्यम से संग्रह फ्रेमवर्क में कार्यान्वित की जाती हैं। यह एक सूची को अनिवार्य रूप से एक सरणी के अधिक नम्य संस्करण के रूप में परिभाषित करता है। अंगों का एक विशिष्ट क्रम होता है, और प्रतिरूप अंगों की अनुमति होती है। अंगों को एक विशिष्ट स्थिति में रखा जा सकता है। उन्हें सूची के अंदर भी खोजा जा सकता है। सूची कार्यान्वित करने वाले ठोस वर्गों के दो उदाहरण हैं:


 * java.util.ArrayList, जो सूची को एक सरणी के रूप में कार्यान्वित करता है। जब भी किसी सूची के लिए विशिष्ट कार्यों की आवश्यकता होती है, तो वर्ग इसे प्रस्तुत करने के लिए अंगों को सरणी के अंदर ले जाता है।
 * java.util.LinkedList. यह वर्ग उन अंगों को बिंदु में संग्रहीत करता है जिनमें प्रत्येक के पास सूची में पिछले और अगले बिंदु के लिए एक सूचक होता है। संकेतकों का पालन करके सूची को पार किया जा सकता है, और अंगों के बिंदु को उसके उचित स्थान पर रखने के लिए केवल संकेतकों को बदलकर जोड़ा या हटाया जा सकता है।

स्टैक वर्ग
Java.util.Stack का उपयोग करके स्टैक बनाए जाते हैं। स्टैक स्टैक पर एक नई वस्तु डालने की पद्धति प्रदान करता है (विधि पुश ) और स्टैक से वस्तु को पुनः प्राप्त करने के लिए (पद्धति पॉप )। स्टैक वस्तु को लास्ट-इन-फर्स्ट-आउट (एलआईएफओ) के अनुसार क्रम में वापस करता है, उदा. स्टैक पर नवीनतम रखी गई वस्तु पहले वापस आ जाती है। java.util.Stack जावा द्वारा प्रदान किए गए स्टैक का एक मानक कार्यान्वयन है। स्टैक वर्ग वस्तुओं के लास्ट-इन-फर्स्ट-आउट (एलआईएफओ) स्टैक का प्रतिनिधित्व करता है। यह वर्ग java.util.Vector को पांच संचालनों के साथ विस्तारित करता है जो एक सदिश को स्टैक के रूप में अभिक्रियित करने की अनुमति देता है। सामान्य पुश और पॉप प्रबंध प्रदान किए जाते हैं, साथ ही स्टैक पर शीर्ष वस्तु को देखने के लिए एक पद्धति ,स्टैक खाली है या नहीं, यह जांचने की एक पद्धति और एक वस्तु के लिए स्टैक खोजने और शीर्ष से कितनी दूर है यह पता लगाने की एक पद्धति। जब स्टैक पहली बार बनाया जाता है, तो इसमें कोई वस्तु नहीं होती है।

पंक्ति इंटरफेस
Java.util.Queue इंटरफ़ेस एक पंक्ति आंकड़े फ्रेमवर्क को परिभाषित करता है, जो अंगों को उस क्रम में संग्रहीत करता है जिसमें वे डाले गए हैं। नए जोड़े क्रम के अंत में जाते हैं, और अंगों को सामने से हटा दिया जाता है। यह फर्स्ट-इन फर्स्ट-आउट प्रणाली बनाता है। यह इंटरफ़ेस java.util.LinkedList, java.util.ArrayDeque, और java.util.PriorityQueue द्वारा कार्यान्वित किया गया है। लिंक्ड सूची, निश्चित रूप से, सूची इंटरफ़ेस को भी लागू करता है और इसे एक के रूप में भी उपयोग किया जा सकता है। लेकिन इसमें पंक्ति के तरीके भी हैं। ऐरेडेक पंक्ति को एक सरणी के रूप में लागू करता है। लिंक्ड सूची और ऐरेडेक दोनों ही java.util.Deque इंटरफ़ेस के कार्यान्वयन थे , जो इसे और अधिक नम्यता प्रदान करता है। java.util.Queue को इसके सबइंटरफेस, java.util.concurrent.BlockingQueue के साथ अधिक नम्य ढंग से उपयोग किया जा सकता है। BlockingQueue इंटरफ़ेस एक नियमित पंक्ति की तरह काम करता है, लेकिन पंक्ति में जोड़ने और हटाने से अवरुद्ध हो रहा है। यदि खाली पंक्ति पर रिमूव को कॉल किया जाता है, तो इसे पंक्ति में किसी वस्तु के प्रदर्शित होने के लिए निर्दिष्ट समय या अनिश्चित काल तक प्रतीक्षा करने के लिए सेट किया जा सकता है। इसी तरह, किसी वस्तु को जोड़ना पंक्ति पर एक वैकल्पिक क्षमता प्रतिबंध के अधीन है, और पद्धति लौटने से पहले पंक्ति में स्थान उपलब्ध होने की प्रतीक्षा कर सकती है। java.util.PriorityQueue java.util.Queue को लागू करता है, लेकिन इसे संशोधित भी करता है। अंगों को उस क्रम में क्रमबद्ध करने के बजाय जिसमें वे डाले गए हैं, उन्हें प्राथमिकता के आधार पर क्रमबद्ध किया जाता है। प्राथमिकता निर्धारित करने के लिए उपयोग की जाने वाली पद्धति या तो अंगों में तुलना पद्धति या निर्माता व्दारा दी गई पद्धति है। वर्ग वस्तुओं को क्रमबद्ध रखने के लिए संचय का उपयोग करके इसे बनाता है।

दोनों ओर से समान पंक्ति(डेक) इंटरफेस
Java.util.Queue इंटरफ़ेस को java.util.Deque सबइंटरफ़ेस द्वारा विस्तारित किया गया है। एक डेक दोनों ओर से समान पंक्ति बनाता है। जबकि एक नियमित पंक्ति केवल पीछे की ओर सम्मिलन और आगे की ओर निष्कासन की अनुमति देती है, डेक सम्मिलन या निष्कासन को आगे और पीछे दोनों जगह करने की अनुमति देता है। एक डेक एक पंक्ति की तरह है जिसे आगे या पीछे, या दोनों में एक साथ उपयोग किया जा सकता है। इसके अतिरिक्त, आगे और पीछे दोनों इटरेटर उत्पन्न किए जा सकते हैं। डेक इंटरफ़ेस java.util.ArrayDeque और java.util.LinkedList द्वारा कार्यान्वित किया जाता है। Java.util.concurrent.BlockingDeque इंटरफ़ेस java.util.concurrent.BlockingQueue के समान कार्य करता है। सम्मिलन या निष्कासन के लिए सम्मिलन या निष्कासन की प्रतीक्षा करने के लिए समय सीमा के साथ सम्मिलन और निष्कासन के लिए समान पद्धतियां प्रदान की जाती हैं। हालाँकि, इंटरफ़ेस डेक का नम्यता भी प्रदान करता है। सम्मिलन और निष्कासन दोनों सिरों पर हो सकता है। ब्लॉकिंग फ़ंक्शन को डेक फ़ंक्शन के साथ जोड़ा जाता है।

इंटरफेस समूह
जावा का java.util.Set इंटरफ़ेस समूह को परिभाषित करता है। एक समूह में कोई प्रतिरूप अंग नहीं हो सकते। इसके अतिरिक्त, समूह का कोई निर्धारित क्रम नहीं है। इसलिए, अंगों को सूचक द्वारा नहीं पाया जा सकता है। समूह java.util.HashSet, java.util.LinkedHashSet, और java.util.TreeSet द्वारा कार्यान्वित किया जाता है। हैशसेट हैश तालिका का उपयोग करता है। अधिक विशेष रूप से, यह हैश और अंगों को भंडार करने और प्रतिरूप को रोकने के लिए java.util.HashMap का उपयोग करता है। java.util.LinkedHashSet यह सम्मिलित क्रम में सभी अंगों के लिंक के साथ एक दोगुनी लिंक्ड सूची बना रहा है। यह सुनिश्चित करता है कि समूह पर पुनरावृत्ति क्रम अनुमानित है। java.util.TreeSet एक java.util.TreeMap द्वारा कार्यान्वित एक लाल-काले ट्री का उपयोग करता है। लाल-काले ट्री यह सुनिश्चित करते हैं कि कोई प्रतिरूप न हो। इसके अतिरिक्त, यह ट्री सेट को java.util.SortedSet को लागू करने की अनुमति देता है। Java.util.Set इंटरफ़ेस को java.util.SortedSet इंटरफ़ेस द्वारा विस्तारित किया गया है। नियमित समूह के विपरीत, वर्गीकृत किए गए समूह में अंगों को क्रमबद्ध किया जाता है, या तो अंग की तुलना करने के लिए पद्धति, या क्रमबद्ध किए गए समूह के निर्माता को प्रदान की गई पद्धति । क्रमबद्ध किए गए समूह के पहले और अंतिम अंगों को पुनः प्राप्त किया जा सकता है, और सबसेट को न्यूनतम और अधिकतम मानों के साथ-साथ आदेशित समूह के शुरुआत या अंत में बनाया जा सकता है। SortedSet इंटरफ़ेस java.util.TreeSet द्वारा लागू किया गया है। java.util.SortedSet को java.util.NavigableSet इंटरफ़ेस के माध्यम से विस्तारित किया गया है। यह सॉर्टेडसेट के समान है, लेकिन कुछ अतिरिक्त तरीके हैं। तल, अन्तिम सीमा, लघु, और उच्च पद्धतियां समूह में एक अंग खोजती हैं जो प्राचल के करीब है। इसके अतिरिक्त, समूह में वस्तुओं पर अवरोही पुनरावर्तक प्रदान किया जाता है। सॉर्टेडसेट के साथ, java.util.TreeSet नेविगेबलसेट को लागू करता है।

मानचित्र इंटरफेस
मानचित्र जावा में java.util.Map इंटरफ़ेस द्वारा परिभाषित किए गए हैं। मानचित्र साधारण आंकड़े फ्रेमवर्कएं हैं, जो एक आधारभूत को एक अंग से जोड़ती हैं। इससे मानचित्र बहुत नम्य हो जाता है। यदि आधारभूत अंग का हैश कोड है, तो मानचित्र अनिवार्य रूप से एक समूह है। यदि यह केवल एक बढ़ती हुई संख्या है, तो यह एक सूची बन जाती है। मानचित्रों java.util.HashMap, java.util.LinkedHashMap, और java.util.TreeMap द्वारा कार्यान्वित किए जाते हैं। हैशमैप हैश तालिका का उपयोग करता है। विभिन्न समूहों में अंगों को खोजने के लिए आधारभूत के हैश का उपयोग किया जाता है| LinkedHashMap अंगों के बीच एक दोगुनी लिंक्ड सूची बनाकर इसका विस्तार करता है, जिससे उन्हें उस क्रम में अभिगम करने की अनुमति देता है जिसमें उन्हें मानचित्र में डाला गया था। ट्रीमैप, हैशमैप और लिंक्ड हैश मैप के विपरीत, एक लाल-काले ट्री का उपयोग करता है। कुंजी का उपयोग ट्री में बिंदु के मान के रूप में किया जाता है, और बिंदु मानचित्र में अंगों को संकेत करते हैं। Java.util.Map इंटरफ़ेस को इसके सबइंटरफ़ेस, java.util.SortedMap द्वारा विस्तारित किया गया है। यह इंटरफ़ेस एक मानचित्र को परिभाषित करता है जिसे प्रदान की गई कुंजियों द्वारा क्रमबद्ध किया जाता है। एक बार फिर, तुलना करने के लिए पद्धति या क्रमबद्ध किए गए मानचित्र के निर्माता में प्रदान की गई पद्धति का उपयोग करके, मूल-अंग जोड़े को कुंजियों द्वारा क्रमबद्ध किया जाता है। मानचित्र में पहली और अंतिम कुंजियों को कहा जा सकता है। इसके अतिरिक्त, सबमैप न्यूनतम और अधिकतम आधार से बनाए जा सकते हैं। SortedMap java.util.TreeMap द्वारा कार्यान्वित किया जाता है। Java.util.NavigableMap इंटरफ़ेस Java.util.SortedMap को विभिन्न तरीकों से विस्तारित करता है। पद्धतियाें को कहा जा सकता है कि किसी भी दिशा में दिए गए आधार के निकटतम आधार या मानचित्र प्रविष्टि को ढूंढते हैं। मानचित्र को उल्टा भी किया जा सकता है, और यह उल्टे क्रम में एक पुनरावर्तक उत्पन्न कर सकता है। इसे java.util.TreeMap द्वारा कार्यान्वित किया जाता है।

जावा संग्रह फ्रेमवर्क के लिए विस्तारण
जावा संग्रह फ्रेमवर्क को अपाचे कॉमन्स संग्रह लाइब्रेरी द्वारा विस्तारित किया गया है, जो संग्रह प्रकार जैसे बैग और द्विदिश मानचित्रों के साथ- साथ यूनियनों और प्रतिच्छेदन को बनाने के लिए उपयोगिताओं को जोड़ता है। गूगल ने गोवा के हिस्से के रूप में अपनी संग्रह लाइब्रेरी जारी की है।

यह भी देखें

 * संग्रह
 * कंटेनर
 * मानक आदर्श लाइब्रेरी
 * जावा समरूपता
 * जावा समवर्ती मानचित्र