"अच्छा, आपका प्रोसेसर कैसा है?"

"कोई बात नहीं। मैं एक घंटे के लिए तरल नाइट्रोजन में बैठा रहा, तो अब मैं नए जैसा अच्छा हूं!"

"बढ़िया। तो चलिए जारी रखते हैं।"

"संग्रह सेट करें।"

गणितीय रूप से बोलना, एक सेट अद्वितीय तत्वों का एक समूह है। इस प्रकार, प्रोग्रामिंग में, एक सेट अद्वितीय तत्वों का संग्रह है, यानी एक संग्रह जो आपको समान तत्वों को स्टोर करने नहीं देता है।

"मुझे नहीं पता कि ऐली ने आपको सेट की विरासत पदानुक्रम दिखाई या नहीं। यदि नहीं, तो यह यहाँ है:"

सेट और क्यू इंटरफेस का कार्यान्वयन - 1

"एक हैशसेट एक संग्रह है जो हैशकोड () विधि द्वारा लौटाए गए हैश मानों का उपयोग करके आंतरिक रूप से तत्वों को संग्रहीत करता है। "

"सादगी के लिए, हैशसेट <ई> एक हैश मैप <ई, ऑब्जेक्ट> ऑब्जेक्ट स्टोर करता है जो हैशसेट के मानों को कुंजी के रूप में संग्रहीत करता है।"

"वाह!"

"हैश कोड का उपयोग करने से आप सेट से तत्वों को जल्दी से खोज सकते हैं, जोड़ सकते हैं और हटा सकते हैं।"

"लेकिन ध्यान रखें कि आपकी कक्षा को सेट में अपनी कक्षाओं की वस्तुओं को जोड़ने के लिए हैशकोड और समान विधियों को ठीक से लागू करना चाहिए, और उन्हें वहां सही तरीके से ढूंढना चाहिए।"

" हैशसेट/हैश मैप के अंदर दोनों विधियों का बहुत उपयोग किया जाता है । "

"यदि आप हैशकोड () विधि को लागू करना भूल जाते हैं , तो आप सेट में अपनी वस्तु को खोजने में सक्षम नहीं होने का जोखिम उठाते हैं, भले ही वह मौजूद हो।"

"हाँ, मुझे याद है, मुझे याद है। आपने मुझे इसके बारे में पहले बताया था। मैंने इसके बारे में सब कुछ सुना है।"

"ठीक है। फिर यहाँ आपके लिए कुछ और उपयोगी जानकारी है।"

"मान लीजिए कि आपने अपनी कक्षा में हैशकोड और बराबर को  सही ढंग से कार्यान्वित किया है , और आप खुशी से अपनी वस्तुओं को सेट में स्टोर करते हैं।"

"लेकिन फिर आप जाते हैं और किसी एक वस्तु को बदलते हैं, और ऐसा करने से आप उसके हैश की गणना करने के लिए उपयोग किए जाने वाले आंतरिक डेटा को बदल देते हैं । इसलिए वस्तु का हैश बदल जाता है।"

"और इसका मतलब यह है कि जब आप इसे सेट में खोजते हैं, तो आपको शायद यह नहीं मिलेगा।"

"वाह! यह कैसे काम करता है?"

"हैश के साथ काम करते समय यह एक प्रसिद्ध गड़बड़ी है। अनिवार्य रूप से, हैशसेट (और हैश मैप) खोजों को केवल तभी गारंटी दी जाती है जब ऑब्जेक्ट अपरिवर्तनीय हों ।"

"वाह! और क्या, कोई इसके बारे में कुछ नहीं करता?"

"हर कोई दिखावा करता है कि समस्या मौजूद नहीं है। लेकिन यह अक्सर साक्षात्कारों में सामने आता है, इसलिए यह याद रखने योग्य हो सकता है ..."

"एक लिंक्ड हैशसेट एक हैशसेट है जिसके तत्वों को एक लिंक्ड सूची में भी संग्रहीत किया जाता है। सामान्य हैशसेट्स तत्वों के आदेश का समर्थन नहीं करते हैं। सबसे पहले, यह केवल एक आधिकारिक ऑपरेशन नहीं है। दूसरा, यहां तक ​​​​कि आंतरिक ऑर्डर भी महत्वपूर्ण रूप से बदल सकता है जब एक एकल तत्व जोड़ा जाता है।"

लेकिन आप LinkedHashSet से एक पुनरावर्तक प्राप्त कर सकते हैं और इसे LinkedHashSet में जोड़े गए क्रम में सभी तत्वों के माध्यम से जाने के लिए उपयोग कर सकते हैं । ऐसा अक्सर नहीं होता है, लेकिन कभी-कभी इसकी बहुत जरूरत होती है।"

"मैं देख रहा हूँ। मुझे अच्छा लगता है जब कक्षाएं इन «बस के मामले में» परिदृश्यों के लिए मौजूद होती हैं। ऐसे मामले दुर्लभ नहीं होते हैं।"

" ट्रीसेट एक संग्रह है जो मूल्यों द्वारा आदेशित पेड़ के रूप में तत्वों को संग्रहीत करता है। ट्रीसेट <ई> में एक ट्रीमैप <ई, ऑब्जेक्ट> होता है जो इन सभी मूल्यों को संग्रहीत करता है। और यह ट्रीमैप स्टोर करने के लिए एक संतुलित लाल -काले पेड़ का उपयोग करता है तत्व । नतीजतन, यह बहुत तेजी से जोड़ने, हटाने और संचालन शामिल करने का समर्थन करता है।"

"हाँ, मुझे याद है। हमने हाल ही में इस पर चर्चा की। और मैंने यह भी सोचा कि इसका उपयोग कहाँ किया जाता है।"

"और यह पता चला है कि जावा के कुछ सबसे लोकप्रिय संग्रह इसका उपयोग करते हैं।"

"हां। वैसे, साक्षात्कारकर्ता अक्सर ट्रीसेट के बारे में पूछते हैं। वे आम तौर पर आपको धोखा देने की कोशिश कर रहे हैं। वे कहेंगे, 'यदि कोई ट्रीसेट एक बाइनरी ट्री का उपयोग करता है, तो सभी तत्व एक लंबी शाखा बना सकते हैं, इसलिए खोज में समय लगेगा। लंबे समय तक। «यह सिर्फ यह कहते हुए ढीठ साथी को उसकी जगह पर रखने का समय है, "यहां तक ​​​​कि एक बच्चा भी जानता है कि ट्रीसेट और ट्रीमैप संतुलित लाल-काले पेड़ों का उपयोग करते हैं, इसलिए यह स्थिति वास्तव में असंभव है।"

"आह। मुझे उस व्यक्ति का चेहरा देखना अच्छा लगेगा जिसने यह प्रश्न पूछा था। मुझे वह वाक्यांश याद भी हो सकता है। ..."

"लेकिन व्यवहार में, सेट उतना सरल नहीं निकला जितना मैंने शुरू में सोचा था।"

"दूसरी ओर, क्यू के साथ स्थिति बहुत सरल है:"

सेट और क्यू इंटरफेस का कार्यान्वयन - 2

" कतार एक कतार लागू करता है। तत्वों को कतार के अंत में जोड़ा जाता है और सामने से लिया जाता है।"

" PriorityQueue वास्तव में Queue इंटरफ़ेस का एकमात्र क्लासिक कार्यान्वयन है , LinkedList की गिनती नहीं , जो तकनीकी रूप से भी एक क्यू है।"

"ठीक है, मैं थक गया हूँ। आज के लिए बस इतना ही। अगली बार तक।"