"আচ্ছা, তোমার প্রসেসর কেমন?"

"ঠিক আছে। আমি তরল নাইট্রোজেনে এক ঘণ্টা বসেছিলাম, তাই এখন আমি নতুনের মতো ভালো!"

"দারুণ। তাহলে চলুন চালিয়ে যাই।"

"সংগ্রহ সেট করুন।"

গাণিতিকভাবে বলতে গেলে, একটি সেট অনন্য উপাদানের একটি গ্রুপ। সুতরাং, প্রোগ্রামিং-এ, একটি সেট হল অনন্য উপাদানের একটি সংগ্রহ, অর্থাৎ একটি সংগ্রহ যা আপনাকে অভিন্ন উপাদান সংরক্ষণ করতে দেয় না।

"আমি জানি না যে এলি আপনাকে সেটের উত্তরাধিকারের শ্রেণিবিন্যাস দেখিয়েছে কিনা। যদি না হয়, তাহলে এটি এখানে:"

সেট এবং কিউ ইন্টারফেসের বাস্তবায়ন - 1

"একটি হ্যাশসেট হল একটি সংগ্রহ যা হ্যাশকোড () পদ্ধতি দ্বারা প্রত্যাবর্তিত হ্যাশ মান ব্যবহার করে উপাদানগুলিকে অভ্যন্তরীণভাবে সংরক্ষণ করে ।"

"সরলতার জন্য, HashSet<E> একটি HashMap<E, Object> অবজেক্ট সঞ্চয় করে যা হ্যাশসেটের মানগুলিকে কী হিসাবে সংরক্ষণ করে।"

"ওহ!"

"হ্যাশ কোড ব্যবহার করে আপনি সেট থেকে উপাদানগুলিকে দ্রুত অনুসন্ধান করতে, যোগ করতে এবং সরাতে পারবেন।"

"কিন্তু মনে রাখবেন যে আপনার ক্লাসের একটি সেটে আপনার ক্লাসের অবজেক্ট যোগ করার জন্য এবং সেখানে সঠিকভাবে খুঁজে পেতে আপনার ক্লাসকে অবশ্যই হ্যাশকোড এবং সমান পদ্ধতিগুলি সঠিকভাবে প্রয়োগ করতে হবে।"

"উভয় পদ্ধতিই হ্যাশসেট/হ্যাশম্যাপের মধ্যে প্রচুর ব্যবহৃত হয় । "

"আপনি যদি হ্যাশকোড () পদ্ধতিটি প্রয়োগ করতে ভুলে যান , তাহলে আপনি সেটটিতে আপনার অবজেক্ট খুঁজে না পাওয়ার ঝুঁকি, এমনকি এটি উপস্থিত থাকলেও।"

"হ্যাঁ, আমার মনে আছে, আমার মনে আছে। আপনি আমাকে এই সম্পর্কে আগে বলেছিলেন। আমি এটি সম্পর্কে সব শুনেছি।"

"ঠিক আছে। তাহলে এখানে আপনার জন্য আরও কিছু দরকারী তথ্য আছে।"

"ধরুন আপনি আপনার ক্লাসে হ্যাশকোড এবং সমানভাবে  সঠিকভাবে প্রয়োগ করেছেন এবং আপনি আনন্দের সাথে আপনার বস্তুগুলিকে একটি সেটে সংরক্ষণ করেছেন।"

"কিন্তু তারপরে আপনি যান এবং একটি বস্তু পরিবর্তন করুন, এবং এটি করে আপনি তার হ্যাশ গণনা করতে ব্যবহৃত অভ্যন্তরীণ ডেটা পরিবর্তন করেন । তাই বস্তুর হ্যাশ পরিবর্তন হয়।"

"এবং এর মানে হল যে আপনি যখন সেটে এটি অনুসন্ধান করবেন, আপনি সম্ভবত এটি খুঁজে পাবেন না।"

"ওহ! এটা কিভাবে কাজ করে?"

"হ্যাশগুলির সাথে কাজ করার সময় এটি একটি সুপরিচিত সমস্যা৷ মূলত, হ্যাশসেট (এবং হ্যাশম্যাপ) অনুসন্ধানগুলি শুধুমাত্র সঠিকভাবে কাজ করার নিশ্চয়তা দেয় যদি বস্তুগুলি অপরিবর্তনীয় হয় ।"

"ওহ! আর কি, কেউ এটা নিয়ে কিছু করে না?"

"সবাই ভান করে যে সমস্যাটি নেই। কিন্তু এটি প্রায়শই সাক্ষাত্কারে আসে, তাই এটি মনে রাখা মূল্যবান হতে পারে..."

"একটি লিঙ্কডহ্যাশসেট হল একটি হ্যাশসেট যার উপাদানগুলি একটি লিঙ্কযুক্ত তালিকাতেও সংরক্ষিত থাকে৷ সাধারণ হ্যাশসেটগুলি উপাদানগুলির ক্রম সমর্থন করে না৷ প্রথমত, এটি কেবল একটি অফিসিয়াল অপারেশন নয়৷ দ্বিতীয়ত, এমনকি অভ্যন্তরীণ ক্রম উল্লেখযোগ্যভাবে পরিবর্তন হতে পারে যখন একটি একক উপাদান যোগ করা হয়।"

কিন্তু আপনি একটি লিঙ্কডহ্যাশসেট থেকে একটি ইটারেটর পেতে পারেন এবং লিঙ্কডহ্যাশসেটে যুক্ত করা সমস্ত উপাদানের মধ্য দিয়ে যেতে এটি ব্যবহার করতে পারেন । এটি প্রায়শই ঘটে না, তবে কখনও কখনও এটি খুব প্রয়োজন হয়।"

"আমি দেখতে পাচ্ছি। আমি পছন্দ করি যখন এইসব «শুধু ক্ষেত্রেই» পরিস্থিতিতে ক্লাস থাকে। এই ধরনের কেসগুলো বিরল নয়।"

" TreeSet হল এমন একটি সংগ্রহ যা উপাদানগুলিকে একটি গাছের আকারে সঞ্চয় করে যা মান অনুসারে সাজানো হয়৷ একটি TreeSet <E> একটি TreeMap <E, Object> ধারণ করে যা এই সমস্ত মান সংরক্ষণ করে৷ এবং এই TreeMap সংরক্ষণ করার জন্য একটি সুষম লাল - কালো গাছ ব্যবহার করে৷ উপাদান । ফলস্বরূপ, এটি খুব দ্রুত যোগ, অপসারণ এবং অপারেশনগুলিকে সমর্থন করে।"

"হ্যাঁ, আমার মনে আছে। আমরা সম্প্রতি এটি নিয়ে আলোচনা করেছি। এবং আমি এটাও ভেবেছিলাম যে এটি কোথায় ব্যবহার করা হয়।"

"এবং দেখা যাচ্ছে যে জাভার সবচেয়ে জনপ্রিয় কিছু সংগ্রহ এটি ব্যবহার করে।"

"হ্যাঁ। যাইহোক, সাক্ষাত্কারকারীরা প্রায়ই TreeSet সম্পর্কে জিজ্ঞাসা করে। তারা সাধারণত আপনাকে প্রতারণা করার চেষ্টা করে। তারা বলবে, 'যদি একটি TreeSet একটি বাইনারি গাছ ব্যবহার করে, তাহলে সমস্ত উপাদান একটি দীর্ঘ শাখা তৈরি করতে পারে, তাই অনুসন্ধানগুলি একটি দীর্ঘ সময়। "এটি কেবলমাত্র এই অহংকারী ব্যক্তিকে তার জায়গায় রাখার সময় এই বলে যে, "এমনকি একটি শিশুও জানে যে ট্রিসেট এবং ট্রিম্যাপ সুষম লাল-কালো গাছ ব্যবহার করে , তাই এই পরিস্থিতি আসলে অসম্ভব।"

"আহ। আমি সেই ব্যক্তিটির মুখ দেখতে চাই যে এই প্রশ্নটি করেছিল। আমি হয়তো সেই বাক্যাংশটি মুখস্ত করতে পারি। …"

"কিন্তু অনুশীলনে, সেটটি ততটা সহজ নয় যতটা আমি প্রাথমিকভাবে ভেবেছিলাম।"

"অন্যদিকে, সারির সাথে পরিস্থিতি অনেক সহজ:"

সেট এবং কিউ ইন্টারফেসের বাস্তবায়ন - 2

" সারি একটি সারি প্রয়োগ করে। উপাদানগুলি সারির শেষে যোগ করা হয় এবং সামনে থেকে নেওয়া হয়।"

" PriorityQueue প্রকৃতপক্ষে কিউ ইন্টারফেসের একমাত্র ক্লাসিক বাস্তবায়ন , লিঙ্কডলিস্ট গণনা করে না , যা প্রযুক্তিগতভাবেও একটি সারি।"

"ঠিক আছে, আমি ক্লান্ত হয়ে যাচ্ছি। আজকের জন্য এতটুকুই। পরের বার পর্যন্ত।"