"এবং শেষ পর্যন্ত, আমি আপনাকে মানচিত্র সম্পর্কে বলব।"

"মানচিত্র, যেমন আপনি জানেন, কী-মানের জোড়ার একটি সেট সঞ্চয় করে। কীগুলি অবশ্যই অনন্য হতে হবে, তবে মানগুলি যেকোনও হতে পারে। আপনি যদি একটি মানচিত্রে একটি কী-মানের জোড়া যোগ করেন এবং সংগ্রহে ইতিমধ্যেই কী থাকে, তাহলে পুরানো মান নতুন দিয়ে প্রতিস্থাপিত হবে। অন্য কথায়, কীটি একটি বিশেষ সূচকের মতো কাজ করে যা যেকোনো বস্তু হতে পারে ।"

মানচিত্র একটি গাণিতিক শব্দ যা (x, y) জোড়ার একটি সেট বোঝায়, যেখানে প্রতিটি অনন্য x কিছু y-এর সাথে মিলে যায়।

প্রোগ্রামাররা মানচিত্র খুব পছন্দ করে, তাই এখানে আমরা 4টি ভিন্ন সংগ্রহ উপস্থাপন করি যা মানচিত্র ইন্টারফেস বাস্তবায়ন করে:

"এখানে এর সহজ উত্তরাধিকার কাঠামো:"

মানচিত্র অনুক্রম - 1

"হলুদ নির্দেশ করে যে এন্ট্রি হল মানচিত্র ইন্টারফেসে একটি নেস্টেড ইন্টারফেস ।"

"এন্ট্রি যোগ করা হয়েছে একটি উপাদান জোড়াকে একক সত্তা হিসাবে বর্ণনা করার জন্য।"

"এখানে মানচিত্রের পদ্ধতি<K,V>:"

পদ্ধতি বর্ণনা
int size() মানচিত্রে জোড়ার সংখ্যা প্রদান করে।
boolean isEmpty() মানচিত্রটি খালি কিনা তা পরীক্ষা করে।
boolean containsKey(Object key) মানচিত্রে কি নির্দিষ্ট কী আছে?
boolean containsValue(Object value) মানচিত্রে কি নির্দিষ্ট মান রয়েছে?
V get(Object key) নির্দিষ্ট কী এর জন্য মান প্রদান করে।
V put(K key, V value) কীটির জন্য একটি নতুন মান সেট করে।
পদ্ধতিটি পুরানো মান বা শূন্য প্রদান করে
putAll(Map<? extends K, ? extends V> m) অন্য মানচিত্র থেকে জোড়া যোগ করে।
void clear() মানচিত্র সাফ করে, অর্থাৎ সব জোড়া মুছে দেয়।
Set<K>keySet() কীগুলির একটি সেট প্রদান করে।
Collection<V>values() মানের সংগ্রহ দেখায়।
Set<Map.Entry<K, V>>entrySet() জোড়ার একটি সেট প্রদান করে।

"K এবং V হল কী এবং মানের টাইপ প্যারামিটার।"

"ঠিক আছে, আমি বেশিরভাগ পদ্ধতির সাথে পরিচিত, কিন্তু আমি তাদের কিছুর সাথেই কাজ করেছি।"

"এন্ট্রি ক্লাস সম্পর্কে আপনি আমাকে আর কী বলতে পারেন?"

"এই ক্লাসটি একজোড়া উপাদানের বর্ণনা দেয়। এর কয়েকটি পদ্ধতি রয়েছে:"

পদ্ধতি বর্ণনা
getKey() কী-মান জোড়ার কী ফেরত দেয়।
getValue() কী-মান জোড়ার মান প্রদান করে।
setValue(V value) মূল-মান জোড়ায় একটি নতুন মান সেট করে।

"এন্ট্রি সুবিধাজনক, কারণ আপনি পুরো মানচিত্র পাস না করে একটি পদ্ধতিতে একটি জোড়া পাস করতে পারেন।"

"আমি দেখি."

"এখন আমি মানচিত্র বাস্তবায়নের উপর যাব।"

"প্রথমটি হল হ্যাশম্যাপ । এটি উপাদানগুলি সঞ্চয় করার জন্য হ্যাশ টেবিল ব্যবহার করে। কী এবং মান যেকোন প্রকারের হতে পারে, পাশাপাশি নালও হতে পারে। যখন সংগ্রহ পরিবর্তিত হয় তখন উপাদানগুলির ক্রম পরিবর্তিত হতে পারে ।"

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

"খুব মোটামুটিভাবে বলতে গেলে, 1 থেকে 100 পর্যন্ত হ্যাশ কোড সহ উপাদানগুলি প্রথম বালতিতে পড়ে, 101 থেকে 200 এর মান সহ দ্বিতীয়টিতে পড়ে এবং আরও অনেক কিছু।"

"এইভাবে উপাদানগুলি সংরক্ষণ করার বিষয়টি হল যে উপাদানগুলি অনুসন্ধান করার বা অপসারণ করার সময় আমরা অপ্রাসঙ্গিক বালতিতে সমস্ত উপাদানগুলিকে মুছে ফেলতে পারি।"

"আমি দেখি."

"হ্যাশম্যাপ সম্পর্কে সত্যিই একটি ভাল নিবন্ধ রয়েছে৷ আমি আপনাকে এটি পড়ার পরামর্শ দিচ্ছি: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"দ্বিতীয় সংগ্রহ হল LinkedHashMap । হ্যাশম্যাপ থেকে এর প্রধান পার্থক্য হল এটি একটি লিঙ্ক করা তালিকা হিসাবে আইটেমগুলিকেও সংরক্ষণ করে। একটি সাধারণ হ্যাশম্যাপে, উপাদানগুলির ক্রম অনির্ধারিত এবং সময়ের সাথে সাথে পরিবর্তিত হতে পারে। এবং আপনি লিঙ্কডহ্যাশম্যাপ থেকে একটি পুনরাবৃত্তিকারী পেতে পারেন। এবং LinkedHashMap-এ যে ক্রমানুসারে সেগুলি যোগ করা হয়েছিল সেই ক্রমানুসারে সমস্ত উপাদানগুলির মধ্য দিয়ে চলার জন্য এটি ব্যবহার করুন৷ উপরন্তু, LinkedHashMap-এ একটি পুনরাবৃত্তিকারী রয়েছে যা আপনাকে শেষ ব্যবহার/ক্রিয়াকলাপের ক্রমে সমস্ত জোড়ার মধ্য দিয়ে যেতে দেয়৷"

"লিঙ্কডহ্যাশম্যাপ সম্পর্কে সত্যিই একটি ভাল নিবন্ধ রয়েছে। এখানে আপনি যান: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"আমি আজ যে তৃতীয় সংগ্রহের কথা বলতে চাই তা হল ট্রিম্যাপ ।"

" ট্রিম্যাপ তার উপাদানগুলিকে আরোহী ক্রমে সাজিয়ে রাখে৷ ট্রিম্যাপ উপাদানগুলি সঞ্চয় করার জন্য একটি সুষম লাল-কালো গাছ ব্যবহার করে৷"

"ফলে, সন্নিবেশের সময় এবং অনুসন্ধানের সময় খুব কম। খুব বেশি পরিমাণে ডেটা ব্যবহার করার সময় এই ক্লাসটি একটি দুর্দান্ত পছন্দ।"

"এবং, অবশ্যই, ট্রিম্যাপে আমাদের একটি নিবন্ধ রয়েছে: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"আমি তোমাকে এখনো কি বলিনি?"

"দুর্বলহ্যাশম্যাপ, তবে ঋষি আমাকে কয়েক দিন আগে এটি সম্পর্কে বলেছিলেন।"

"কখন এটি ছিল?"

"যখন তিনি SoftReference, WeakReference, এবং PhantomReference সম্পর্কে কথা বলেছিলেন।"

"আমি আপনাকে বিশ্বাস করি, আপনি তাদের সকলের নাম ঠিক রেখেছেন তা বিবেচনা করে। তারপর আরাম করুন। আজ রাতে দেখা হবে।"

"বাই, এলি।"