জাভাতে একটি বস্তুর হ্যাশ কোড পেতে 'হ্যাশকোড' ফাংশনটি ব্যবহার করা হয়। এটি সুপার ক্লাস অবজেক্টের একটি অবজেক্ট। এটি একটি পূর্ণসংখ্যা হিসাবে অবজেক্ট রেফারেন্সের মেমরি ফেরত দেয়। এটি একটি নেটিভ ফাংশন, যার মানে অবজেক্টের রেফারেন্স আনতে জাভাতে কোনো সরাসরি পদ্ধতি ব্যবহার করা যাবে না।
হ্যাশম্যাপের ভাল পারফরম্যান্সের জন্য, হ্যাশকোড() সঠিকভাবে ব্যবহার করুন। মূলত, এই ফাংশনটি বালতি এবং সূচকের মান গণনা করতে ব্যবহৃত হয়। এটি নিম্নলিখিত উপায়ে সংজ্ঞায়িত করা হয়েছে -
public native hashCode()
যেহেতু আমরা 'বালতি' উল্লেখ করেছি, তাই এর অর্থ কী তা বোঝা গুরুত্বপূর্ণ। এটি একটি উপাদান যা নোড সংরক্ষণ করতে ব্যবহৃত হয়। একটি একক বালতিতে দুটির বেশি নোড থাকতে পারে। নোডগুলি সংযুক্ত তালিকা ডেটা কাঠামো ব্যবহার করে সংযুক্ত করা যেতে পারে। বালতি এবং লোড ফ্যাক্টর ব্যবহার করে হ্যাশম্যাপের ক্ষমতা গণনা করা যেতে পারে।
Capacity = number of buckets * load factor
দুটি বস্তুর মধ্যে সমতা পরীক্ষা করতে 'সমান' ফাংশন ব্যবহার করা হয়। এটি সুপার ক্লাস অবজেক্ট দ্বারাও দেওয়া হয়। কাস্টমাইজড ইমপ্লিমেন্টেশন প্রদান করে কাস্টমাইজড ক্লাসে এই ফাংশনটি ওভাররাইড করা যেতে পারে। প্রশ্ন দুটি বস্তু সমান কি না তার উপর নির্ভর করে এই ফাংশনটি সত্য বা মিথ্যা প্রদান করে।
একটি সূচক মান তৈরি করা হয় যাতে অ্যারের আকার বড় না হয়, যার ফলে 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
'হ্যাশ_ম্যাপ' নামের একটি ক্লাস একটি স্ট্রিং এবং একটি কনস্ট্রাক্টরকে সংজ্ঞায়িত করে। এটি 'হ্যাশকোড' নামে আরেকটি ফাংশন দ্বারা ওভাররাইড করা হয়েছে। এখানে, হ্যাশম্যাপের মূল মানগুলি পূর্ণসংখ্যাতে রূপান্তরিত হয় এবং হ্যাশ কোড প্রিন্ট করা হয়। এর পরে, 'সমান' ফাংশনটি ওভাররাইড করা হয় এবং কীটি হ্যাশম্যাপের কী-এর সমান কিনা তা পরীক্ষা করে। ক্লাস ডেমো একটি প্রধান ফাংশন সংজ্ঞায়িত করে যেখানে হ্যাশম্যাপের একটি নতুন উদাহরণ তৈরি করা হয়। উপাদানগুলিকে 'পুট' ফাংশন ব্যবহার করে এই কাঠামোতে যোগ করা হয় এবং কনসোলে প্রিন্ট করা হয়।