"बरं, तुझा प्रोसेसर कसा आहे?"

"हे ठीक आहे. मी एक तास लिक्विड नायट्रोजनमध्ये बसलो, म्हणून आता मी नवीन म्हणून चांगला आहे!"

"छान. मग चालू ठेवूया."

"संग्रह सेट करा."

गणितीयदृष्ट्या, संच हा अद्वितीय घटकांचा समूह आहे. अशाप्रकारे, प्रोग्रामिंगमध्ये, सेट हा अद्वितीय घटकांचा संग्रह आहे, म्हणजे एक संग्रह जो तुम्हाला एकसारखे घटक संचयित करू देत नाही.

"एलीने तुम्हाला सेटची वारसा श्रेणी दर्शविली की नाही हे मला माहित नाही. नसल्यास, ते येथे आहे:"

सेट आणि क्यू इंटरफेसची अंमलबजावणी - 1

" हॅशसेट हा एक संग्रह आहे जो हॅशकोड () पद्धतीद्वारे परत केलेली हॅश व्हॅल्यू वापरून घटक आंतरिकरित्या संग्रहित करतो ."

"साधेपणासाठी, हॅशसेट<E> हॅशमॅप<E, ऑब्जेक्ट> ऑब्जेक्ट संग्रहित करते जे हॅशसेटची मूल्ये की म्हणून संग्रहित करते."

"व्वा!"

"हॅश कोड वापरल्याने तुम्हाला सेटमधून घटक द्रुतपणे शोधता येतात, जोडता येतात आणि काढता येतात."

"परंतु लक्षात ठेवा की तुमच्या वर्गातील वस्तू सेटमध्ये जोडण्यासाठी आणि तेथे त्यांना योग्यरित्या शोधण्यासाठी तुमच्या वर्गाने हॅशकोड आणि समान पद्धती योग्यरित्या लागू केल्या पाहिजेत."

" हॅशसेट/हॅशमॅपमध्ये दोन्ही पद्धती मोठ्या प्रमाणात वापरल्या जातात . "

"तुम्ही हॅशकोड () पद्धत अंमलात आणायला विसरलात, तर तुमची वस्तू सेटमध्ये असली तरीही तुम्हाला ती सापडणार नाही असा धोका आहे."

"हो, मला आठवतंय, मला आठवतंय. तू मला याबद्दल आधी सांगितलंस. मी त्याबद्दल सगळं ऐकलं आहे."

"ठीक आहे. मग तुमच्यासाठी आणखी काही उपयुक्त माहिती आहे."

"समजा तुम्ही तुमच्या वर्गात हॅशकोड आणि बरोबरीची  योग्यरित्या अंमलबजावणी केली आहे आणि तुम्ही आनंदाने तुमच्या वस्तू एका सेटमध्ये संग्रहित कराल."

"परंतु नंतर तुम्ही जा आणि ऑब्जेक्टपैकी एक बदला, आणि असे करून तुम्ही त्याच्या हॅशची गणना करण्यासाठी वापरलेला अंतर्गत डेटा बदलता . त्यामुळे ऑब्जेक्टचा हॅश बदलतो."

"आणि याचा अर्थ असा की जेव्हा तुम्ही ते सेटमध्ये शोधता तेव्हा तुम्हाला ते सापडणार नाही."

"अरे! कसं चालेल?"

"हॅशसह काम करताना ही एक सुप्रसिद्ध समस्या आहे. मूलत:, हॅशसेट (आणि हॅशमॅप) शोध केवळ ऑब्जेक्ट्स अपरिवर्तनीय असल्यास योग्यरित्या कार्य करण्याची हमी देतात ."

"अरे! आणि काय, कोणीही काही करत नाही?"

"प्रत्येकजण समस्या अस्तित्त्वात नसल्याची बतावणी करतो. परंतु हे वारंवार मुलाखतींमध्ये येते, त्यामुळे ते लक्षात ठेवण्यासारखे असू शकते..."

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

परंतु तुम्ही LinkedHashSet वरून एक पुनरावृत्तीकर्ता मिळवू शकता आणि ते LinkedHashSet मध्ये जोडल्या गेलेल्या सर्व घटकांमधून जाण्यासाठी वापरू शकता . हे सहसा घडत नाही, परंतु कधीकधी याची खूप गरज असते."

"मला दिसत आहे. या «फक्त बाबतीत» परिस्थितींसाठी वर्ग अस्तित्वात असताना मला आवडते. अशी प्रकरणे दुर्मिळ नाहीत."

" TreeSet हा एक संग्रह आहे जो मूल्यांनुसार ऑर्डर केलेल्या झाडाच्या स्वरूपात घटक संग्रहित करतो. TreeSet <E> मध्ये एक TreeMap <E, Object> असतो जो ही सर्व मूल्ये संग्रहित करतो. आणि हा TreeMap संग्रहित करण्यासाठी संतुलित लाल - काळा वृक्ष वापरतो. घटक . परिणामी, ते अतिशय जलद जोडा, काढून टाका आणि ऑपरेशन्स समाविष्ट करते.

"हो, मला आठवतंय. आम्ही नुकतीच यावर चर्चा केली. आणि मी पण विचार केला की हे कुठे वापरले जाते."

"आणि असे दिसून आले की जावाचे काही सर्वात लोकप्रिय संग्रह ते वापरतात."

"हो. तसे, मुलाखत घेणारे सहसा ट्रीसेटबद्दल विचारतात. ते सहसा तुम्हाला फसवण्याचा प्रयत्न करतात. ते म्हणतील, 'जर ट्रीसेट बायनरी ट्री वापरत असेल, तर सर्व घटक एक लांब फांद्या तयार करू शकतात, त्यामुळे शोध लागतील. दीर्घकाळ. «हीच वेळ आहे उद्धट व्यक्तीला त्याच्या जागी असे सांगून ठेवण्याची, "एखाद्या मुलाला देखील माहित आहे की TreeSet आणि TreeMap संतुलित लाल-काळी झाडे वापरतात , त्यामुळे ही परिस्थिती प्रत्यक्षात अशक्य आहे."

"अहो. मला तो प्रश्न विचारणाऱ्या व्यक्तीचा चेहरा बघायला आवडेल. कदाचित मला ते वाक्य आठवत असेल. …"

"परंतु सराव मध्ये, सेट मला सुरुवातीला वाटला तितका साधा नव्हता."

"दुसरीकडे, रांगेची परिस्थिती खूपच सोपी आहे:"

सेट आणि क्यू इंटरफेसची अंमलबजावणी - 2

" रांग रांग लागू करते. घटक रांगेच्या शेवटी जोडले जातात आणि समोरून घेतले जातात."

" प्रायोरिटीक्व्यू ही खरंतर रांग इंटरफेसची एकमेव उत्कृष्ट अंमलबजावणी आहे , लिंक्डलिस्टची गणना करत नाही , जी तांत्रिकदृष्ट्या देखील एक रांग आहे."

"ठीक आहे, मी थकलोय. आज एवढेच. पुढच्या वेळेपर्यंत."