"हाय, अमिगो!"

"हाय, एली!"

"आज आम्ही संग्रहांच्या संरचनेभोवती एकदा आणि सर्वांसाठी आपले डोके गुंडाळणार आहोत."

"मी यासाठी बराच वेळ वाट पाहिली आहे."

"संग्रह काय आहेत हे तुम्हाला आधीच माहित आहे आणि त्यांच्यासोबत कसे कार्य करायचे हे तुम्हाला माहीत आहे. तुमचे ज्ञान एका कठोर प्रणालीमध्ये व्यवस्थित करण्याची वेळ आली आहे. मग बरेच 'का' आणि 'कसे' प्रश्न निघून जातील आणि बहुतेक गोष्टी स्पष्ट होतील."

" कलेक्शन इंटरफेस . कलेक्शन इंटरफेसची इनहेरिटेन्स स्ट्रक्चर असे काहीतरी दिसते:"

कलेक्शन इंटरफेस - १

दोन गोष्टी लक्षात घ्या.

प्रथम, आपण येथे पहात असलेली प्रत्येक गोष्ट एक इंटरफेस आहे.

दुसरे म्हणजे, बाणांचा अर्थ "वारसा" असा होतो.

"दुसर्‍या शब्दात, सूची, सेट आणि रांग संग्रह वारसा घेतात, परंतु नकाशाला नाही?"

"होय. अ‍ॅबस्ट्रॅक्ट क्लासेस नंतर या इंटरफेसचा वारसा घेतात आणि त्या बदल्यात, तुम्हाला माहित असलेली अंमलबजावणी त्या अमूर्त वर्गांना वारसा देते:  ArrayList, Hashtable, TreeSet,... "

"बरोबर आहे तुझं."

"आता या इंटरफेसच्या पद्धती कशासाठी आहेत ते पाहूया:"

पुनरावृत्ती करण्यायोग्य पद्धती <E>: इंटरफेस:

पद्धती वर्णन
Iterator<T> iterator(); इटरेटर ऑब्जेक्ट मिळवते.

"ते पुरेसे वाटत नाही."

"ठीक आहे, ते किती आहेत. ते सर्व पुनरावृत्ती करणार्‍यांसाठी आहे. आम्ही त्यांना आत्ताच कव्हर करणार नाही, परंतु आम्ही लवकरच त्यांना तपशीलवार कव्हर करू."

संकलनाच्या पद्धती <E>: इंटरफेस:

पद्धती वर्णन
boolean add(E e); संग्रहात एक घटक जोडते
boolean addAll(Collection<? extends E> c); संकलनात घटक जोडते
void clear(); संग्रहातील सर्व घटक काढून टाकते
boolean contains(Object o); संग्रहामध्ये घटक आहे का ते तपासते.
boolean containsAll(Collection<?> c); संग्रहात घटक आहेत का ते तपासते.
boolean equals(Object o); संग्रह समतुल्य आहेत का ते तपासते
int hashCode(); हॅश कोड परत करतो
boolean isEmpty(); संग्रह रिकामा आहे का ते तपासते.
Iterator<E> iterator(); इटरेटर ऑब्जेक्ट मिळवते
boolean remove(Object o); संकलनातून एक घटक काढून टाकते
boolean removeAll(Collection<?> c); संकलनातून घटक काढून टाकते
boolean retainAll(Collection<?> c); c मध्ये नसलेले सर्व घटक काढून टाकते
int size(); संग्रहाचा आकार मिळवते
Object[] toArray(); संकलनाला अॅरेमध्ये रूपांतरित करते
<T> T[] toArray(T[] a); संकलनाला अॅरेमध्ये रूपांतरित करते

"मी इथल्या प्रत्येक गोष्टीवर आधीच ठाम आहे. मी यापैकी अर्ध्या पद्धती वापरल्या आहेत आणि बाकीच्या अर्ध्या पद्धतींचा सामना केला आहे."

"छान, चला तर मग पुढे जाऊया."

सूचीच्या पद्धती  <E>: इंटरफेस:

पद्धती वर्णन
void add(int index, E element); संकलनाच्या मध्यभागी घटक जोडते
boolean addAll(int index, Collection<? extends E> c); संकलनात घटक जोडते
E get(int index); निर्देशांकानुसार घटक मिळवते
int indexOf(Object o); घटकाची अनुक्रमणिका (संख्या) मिळवते
int lastIndexOf(Object o); शेवटच्या घटकाची अनुक्रमणिका मिळवते.
ListIterator<E> listIterator(); सूचीसाठी पुनरावृत्ती करणारा परत करतो
ListIterator<E> listIterator(int index); सूचीसाठी पुनरावृत्ती करणारा परत करतो
E remove(int index); घटक त्याच्या निर्देशांकानुसार काढून टाकते
E set(int index, E element); निर्देशांकानुसार नवीन मूल्य सेट करते
List<E> subList(int fromIndex, int toIndex); उपसंग्रह परत करते

"येथेही काहीही नवीन नाही. मला संग्रहांबद्दल जवळजवळ सर्व काही आधीच माहित आहे, ज्याबद्दल मी आनंदी होऊ शकत नाही."

"ठीक आहे, मला वाटते की मला असे काहीतरी सापडेल जे तुम्हाला आश्चर्यचकित करेल. पण चला इंटरफेसचे परीक्षण करणे सुरू ठेवूया:"

सेटच्या पद्धती <E>: इंटरफेस:

पद्धती वर्णन
पद्धती नाहीत

"सेट इंटरफेसमध्ये कोणत्याही नवीन पद्धती नाहीत - फक्त त्या वारशाने मिळतात."

"हो, मी पाहिले की इंटरेबल इंटरफेसमध्ये देखील काहीही नव्हते.

"दुसरीकडे, कमी पद्धती म्हणजे लक्षात ठेवायला कमी!"

"तुमचा जीवन-पुष्टी करणारा आशावाद मला आनंदित करतो."

"सेट इंटरफेस पद्धतींसह दोन इंटरफेसद्वारे वारशाने मिळतो: सॉर्टेडसेट आणि नेव्हिगेबलसेट. परंतु मी त्यावर जाणार नाही किंवा आम्ही कधीही पूर्ण करणार नाही."

"त्याऐवजी, मी तुम्हाला जावामधील संग्रहांचे वर्णन करणारे वर्ग आणि इंटरफेसचे सामान्य चित्र देतो."

"होऊन जाउ दे."

"मग घट्ट धरा:"

संकलन इंटरफेस - 2

"व्वा, ते खूप मोठे आहे!"

"ठीक आहे, ते इतके मोठे नाही. तसेच, लक्षात ठेवा की अमूर्त वर्ग पूर्णपणे ऐच्छिक आहेत. परंतु कोणता वर्ग कोणता इंटरफेस लागू करतो हे लक्षात ठेवणे चांगले आहे. ते बर्‍याचदा उपयोगी पडू शकतात."

"अरे, मी हे देखील लक्षात घेऊ इच्छितो की काही संग्रह अप्रचलित मानले जातात."

"ते कोणते?"

"मी वेक्टर, स्टॅक, डिक्शनरी आणि हॅशटेबल वर्गांबद्दल बोलत आहे. या सामान्य संग्रहांच्या सिंक्रोनाइझ केलेल्या (थ्रेड-सेफ) आवृत्त्या आहेत."

"परंतु Java ने अनेक संग्रहांसह  एक विशेष समवर्ती लायब्ररी जोडली आहे ज्यात केवळ इतर थ्रेड्समधून प्रवेश केला जाऊ शकत नाही, तर त्यामध्ये अधिक कार्यक्षम अंमलबजावणी देखील आहे. ConcurrentHashMap हे हॅशटेबलपेक्षा बरेच कार्यक्षम आहे ."

"तुम्ही वेक्टर, स्टॅक, डिक्शनरी आणि हॅशटेबल संग्रह वापरू शकता, परंतु याची शिफारस केलेली नाही."

"समजले, मी ते लक्षात ठेवेन."

"धन्यवाद, एली!"