এটি দীর্ঘ উত্তর হতে পারে, একটি পানীয় পান এবং পড়ুন…
হ্যাশিং মেমরির একটি মূল-মান জুড়ি সংরক্ষণ করার জন্য যা দ্রুত পড়া এবং আরও দ্রুত লেখা যায়। এটি একটি অ্যারেতে কীগুলি সংরক্ষণ করে এবং একটি লিঙ্কলিস্টে মানগুলি।
আসুন বলুন আমি 4 টি মূল মান জোড়া সংরক্ষণ করতে চাই -
{
“girl” => “ahhan” ,
“misused” => “Manmohan Singh” ,
“horsemints” => “guess what”,
“no” => “way”
}
সুতরাং কীগুলি সঞ্চয় করতে আমাদের 4 টি উপাদানটির অ্যারে প্রয়োজন। এখন আমি কীভাবে এই 4 টির মধ্যে 4 টি অ্যারে সূচকগুলিতে (0,1,2,3) মানচিত্র করব?
সুতরাং জাভা পৃথক কীগুলির হ্যাশকোড খুঁজে পায় এবং এটিকে একটি নির্দিষ্ট অ্যারে সূচীতে ম্যাপ করে। হ্যাশকোড সূত্রগুলি হ'ল -
1) reverse the string.
2) keep on multiplying ascii of each character with increasing power of 31 . then add the components .
3) So hashCode() of girl would be –(ascii values of l,r,i,g are 108, 114, 105 and 103) .
e.g. girl = 108 * 31^0 + 114 * 31^1 + 105 * 31^2 + 103 * 31^3 = 3173020
হ্যাশ আর মেয়ে !! আমি জানি তুমি কি ভাবছ। সেই বুনো দ্বৈত সম্পর্কে আপনার আকর্ষণ আপনাকে একটি গুরুত্বপূর্ণ জিনিস মিস করতে পারে miss
জাভা কেন এটি 31 দিয়ে গুণ করে?
এটি কারণ, 31 2 ^ 5 - 1 ফর্মের মধ্যে একটি বিজোড় প্রধান। এবং বিজোড় প্রাইম হ্যাশ সংঘর্ষের সম্ভাবনা হ্রাস করে
এখন এই হ্যাশ কোডটি কীভাবে অ্যারে সূচকে ম্যাপ করা হবে?
উত্তর হল Hash Code % (Array length -1)
,। সুতরাং “girl”
ম্যাপ করা হয় (3173020 % 3) = 1
আমাদের ক্ষেত্রে। যা অ্যারের দ্বিতীয় উপাদান।
এবং মান "অহান" অ্যারে সূচক 1 এর সাথে যুক্ত একটি লিঙ্কযুক্ত তালিকায় সংরক্ষণ করা হয়।
হ্যাশকোলিশন - উপরে বর্ণিত সূত্রগুলি hasHCode
কীগুলি সন্ধান করার “misused”
এবং “horsemints”
ব্যবহার করার চেষ্টা করলে আপনি উভয়ই আমাদের একই রকম দেখতে পাবেন 1069518484
। হুয়াও !! পাঠ শিখেছি -
2 টি সমান অবজেক্টের অবশ্যই একই হ্যাশকোড থাকতে হবে তবে হ্যাশকোডের সাথে মেলে যদি বস্তু সমান হয় তবে কোনও গ্যারান্টি নেই। সুতরাং এটি বালতি 1 (1069518484% 3) এর "অপব্যবহার" এবং "ঘোড়াগুলি" এর সাথে সম্পর্কিত উভয় মান সংরক্ষণ করতে হবে।
এখন হ্যাশ মানচিত্রটি দেখতে দেখতে -
Array Index 0 –
Array Index 1 - LinkedIst (“ahhan” , “Manmohan Singh” , “guess what”)
Array Index 2 – LinkedList (“way”)
Array Index 3 –
এখন যদি কিছু শরীর চাবির জন্য মানটি খুঁজতে চেষ্টা করে “horsemints”
, জাভা দ্রুত এটির হ্যাশকোড খুঁজে পেতে পারে, এটি মডিউল করে এবং লিংকডলিস্টের সাথে সম্পর্কিত এটির মান অনুসন্ধান করতে শুরু করে index 1
। সুতরাং এইভাবে আমাদের 4 টি অ্যারে সূচকগুলি অনুসন্ধান করার দরকার নেই যাতে এইভাবে ডেটা অ্যাক্সেস দ্রুত হয়।
তবে, অপেক্ষা করুন, এক সেকেন্ড লিঙ্কযুক্ত তালিকার সাথে সম্পর্কিত অ্যারে সূচি 1-তে 3 টি মান রয়েছে, কীভাবে এটি আবিষ্কার করবে যে কী "ঘোড়াগুলি" এর মান ছিল কোনটি?
আসলে আমি মিথ্যা বললাম, যখন আমি বললাম হাশম্যাপ লিংকডলিস্টে কেবলমাত্র মান সংরক্ষণ করে।
এটি মানচিত্রের প্রবেশের হিসাবে উভয় মূল মান জোড়া সংরক্ষণ করে। সুতরাং প্রকৃতপক্ষে মানচিত্রটি এর মতো দেখাচ্ছে।
Array Index 0 –
Array Index 1 - LinkedIst (<”girl” => “ahhan”> , <” misused” => “Manmohan Singh”> , <”horsemints” => “guess what”>)
Array Index 2 – LinkedList (<”no” => “way”>)
Array Index 3 –
এখন আপনি দেখতে পাচ্ছেন অ্যারেআইন্ডেক্স 1 এর সাথে সম্পর্কিত লিঙ্কলিস্টের মধ্য দিয়ে ট্র্যাভার করার সময় এটি আসলে সেই লিংকডলিস্টের প্রতিটি প্রবেশের কীটিকে "ঘোড়াগুলির সাথে" তুলনা করে এবং এটি যখন খুঁজে পায় তখন এটি কেবল তার মান ফেরত দেয়।
আশা করি আপনি এটি পড়ার সময় মজা পেয়েছিলেন :)