কম্পিউটার টিউটোরিয়াল

জাভাতে HashMap-এর অভ্যন্তরীণ কাজকাজ


'hashCode' ফাংশনটি জাভাতে একটি অবজেক্টের হ্যাশ কোড পেতে ব্যবহৃত হয়। এটি সুপার ক্লাস Object-এর একটি অবজেক্ট। এটি অবজেক্ট রেফারেন্সের মেমরি একটি ইন্টিজার হিসেবে রিটার্ন করে। এটি একটি নেটিভ ফাংশন, অর্থাৎ জাভাতে কোনো ডায়রেক্ট মেথড নেই যা অবজেক্টের রেফারেন্স ফেচ করতে পারে।

HashMap-এ ভালো পারফরম্যান্সের জন্য, hashCode() সঠিকভাবে ব্যবহার করুন। মূলত, এই ফাংশনটি বাকেট এবং ইনডেক্স ভ্যালু ক্যালকুলেট করতে ব্যবহৃত হয়। এটি নিচের şekilde সংজ্ঞায়িত -

public native hashCode()

যেহেতু আমরা 'বাকেট' কথা বললাম, এটি বুঝতে গুরুত্বপূর্ণ এটি কী। এটি একটি এলিমেন্ট যা নোড সংরক্ষণ করতে ব্যবহৃত হয়। একটি একক বাকেটে একের অধিক নোড থাকতে পারে। নোডগুলো লিংকড লিস্ট ডেটা স্ট্রাকচার ব্যবহার করে সংযুক্ত হতে পারে। হ্যাশম্যাপের ক্যাপাসিটি বাকেট এবং লোড ফ্যাক্টর ব্যবহার করে ক্যালকুলেট করা যায়।

Capacity = number of buckets * load factor

'equals' ফাংশনটি দুটি অবজেক্টের মধ্যে সমতা চেক করতে ব্যবহৃত হয়। এটি সুপার ক্লাস Object দ্বারা দিয়া হয়েছে। এই ফাংশনটি কাস্টমাইজড ক্লাসে কাস্টমাইজড ইমপ্লিমেন্টেশন দিয়ে ওভাররাইড করা যায়। এই ফাংশনটি true বা false রিটার্ন করে নির্ভর করে প্রশ্নগত দুটি অবজেক্ট সমান কিনা।

একটি ইনডেক্স ভ্যালু জেনারেট করা হয় যাতে অ্যারের আকার বড় না হয়, এয়ারছواد OutOfMemoryException এড়ানো যায়। অ্যারের ইনডেক্স বের করার ফর্মুলা হলো -

Index = hashCode(key) & (n-1) – Here n refers to number of buckets.

একটি উদাহরণ নিচে দেখানো হলো:

উদাহরণ

import java.util.HashMap; class hash_map{    String key;    hash_map(String key){       this.key = key;    }    @Override    public int hashCode(){       int hash = (int)key.charAt(0);       System.out.println("The hash code for key : " + key + " = " + hash);       return hash;    }    @Override    public boolean equals(Object obj){       return key.equals(((hash_map)obj).key);    } } public class Demo{    public static void main(String[] args){       HashMap my_map = new HashMap();       my_map.put(new hash_map("This"), 15);       my_map.put(new hash_map("is"), 35);       my_map.put(new hash_map("a"), 26);       my_map.put(new hash_map("sample"), 45);       System.out.println("The value for key 'this' is : " + my_map.get(new hash_map("This")));       System.out.println("The value for key 'is' is: " + my_map.get(new hash_map("is")));       System.out.println("The value for key 'a' is: " + my_map.get(new hash_map("a")));       System.out.println("The value for key 'sample' is: " + my_map.get(new hash_map("sample")));    } }

আউটপুট

The hash code for key : This = 84 The hash code for key : is = 105 The hash code for key : a = 97 The hash code for key : sample = 115 The hash code for key : This = 84 The value for key 'this' is : 15 The hash code for key : is = 105 The value for key 'is' is: 35 The hash code for key : a = 97 The value for key 'a' is: 26 The hash code for key : sample = 115 The value for key 'sample' is: 45

'hash_map' নামক একটি ক্লাস একটি স্ট্রিং এবং একটি কনস্ট্রাক্টর সংজ্ঞায়িত করে। এটি 'hashCode' নামে আরেকটি ফাংশন দ্বারা ওভাররাইড করা হয়েছে। এখানে, হ্যাশম্যাপের কি ভ্যালুগুলো ইন্টিজারে কনভার্ট করা হয়েছে এবং হ্যাশ কোড প্রিন্ট করা হয়েছে। এরপর, 'equals' ফাংশন ওভাররাইড করা হয়েছে এবং চেক করা হয়েছে কি কি হ্যাশম্যাপের কির সমান। Demo ক্লাসে main ফাংশন আছে যেখানে HashMap-এর একটি নতুন ইনস্ট্যান্স তৈরি করা হয়েছে। 'put' ফাংশন ব্যবহার করে এই স্ট্রাকচারে এলিমেন্ট যোগ করা হয়েছে এবং কনসোলে প্রিন্ট করা হয়েছে।

  1. সমাধান: উইন্ডোজ ১০-এ উইন্ডোজ কী কাজ করছে না

  2. পাইথনের অভ্যন্তরীণ কাজকর্ম

  3. পাইথনে List-এর অভ্যন্তরীণ কাজকর্ম

  4. উইন্ডোজ ১০-এ নন-রেসপন্সিভ উইন্ডোজ কী ফিক্স: কুইক ট্রাবলশুটিং গাইড