HashMap হলো একটি কন্টেইনার, যা কী (key)-মান জোড়া সংরক্ষণ করতে ব্যবহার করা যায়। অন্য প্রোগ্রামিং ভাষায় এই ডেটা স্ট্রাকচারকে মাঝে মাঝে অ্যাসোসিয়েটিভ অ্যারে বা হ্যাশ টেবিল বলা হয়। ম্যাপে কী (key)-এর একটি সেট থাকে, যার প্রত্যেকটি একটি নির্দিষ্ট মানের সাথে ম্যাপ করা থাকে। ব্যবহারকারী উপযুক্ত কী (key) পাস করে সংরক্ষিত মান রিট্রিভ করতে পারেন। ব্যবহারকারীরা কী (key) এবং সংশ্লিষ্ট মান ইনসার্ট ও ডিলিটও করতে পারেন।
HashMap একটি জেনেরিক কলেকশন (স্ট্যান্ডার্ড লাইব্রেরির বেশিরভাগ কলেকশনের মতোই) এবং তাই কী (key) হিসেবে বিস্তৃত ধরনের টাইপ সমর্থন করে, যার মধ্যে ইউজার-ডিফাইন্ড স্ট্রাক্ট ও টুপলও রয়েছে। এর মানগুলি যেকোনো টাইপের হতে পারে।
HashMap তৈরি করাHashMap তৈরি করা হয় HashMap::new() ফাংশন ব্যবহার করে। নিচের কোডটি টিমের নামের সাথে স্কোর ম্যাপ করা একটি HashMap তৈরি করে।
use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
HashMap-এ মান অ্যাক্সেস করাHashMap-এর মধ্যে কোনো মান আছে বলে জানা থাকলে ইনডেক্সিং অপারেটর ([]) ব্যবহার করা উপযুক্ত। উদাহরণস্বরূপ, নীল দলের স্কোর রিট্রিভ করতে আমরা scores["Blue"] ব্যবহার করতে পারি। তবে হ্যাশম্যাপের মধ্যে উপযুক্ত কী (key)-মান জোড়া না থাকলে এই অপারেশনটি প্যানিক করবে।
ইনডেক্সিং অপারেটর ছাড়া HashMap-এ সংরক্ষিত মান অ্যাক্সেস করার আরও দুটি উপায় আছে। প্রথমটি হলো get মেম্বার ফাংশন ব্যবহার করা:
if let Some(blue_score) = scores.get("Blue") {
println!("Blue scored: {blue_score} \n");
}
get অনুরোধ করা কী (key)-এর বিপরীতে সংরক্ষিত মান অ্যাক্সেস করে। সরবরাহ করা কী (key) HashMap-এ না থাকলে এটি None রিটার্ন করে, আর কী (key) থাকলে Some(value) রিটার্ন করে। Rust-এ Options সম্পর্কে আরও জানতে Options কনসেপ্ট দেখুন।
HashMap-এ সংরক্ষিত মান অ্যাক্সেস করার অন্য উপায় হলো entry মেথড ব্যবহার করা। entry মেথড (বা entry API) HashMap-এ কী (key)-মান জোড়ার এন্ট্রির একটি রেফারেন্স রিটার্ন করে। এন্ট্রি হ্যাশে এই কী (key)-এর অবস্থা বোঝায়। কী (key) না থাকলে এন্ট্রিতে কোনো মান থাকে না (এবং এটি একটি মান ইনসার্ট করার সুযোগ দেয়)।
let mut vote_counter: HashMap<_, usize> = HashMap::new();
let votes = ["Blue", "Red", "Red", "Blue", "Red", "Blue", "Blue"];
for vote in votes {
let count = vote_counter.entry(vote).or_default();
*count += 1;
}
println!("{vote_counter:#?}");
এই API নির্দিষ্ট কিছু কমন অ্যাক্সেস প্যাটার্নকে খুব সুবিধাজনক করে তোলে; এর জন্য একটি সম্পূর্ণ কনসেপ্ট (Entry API) উৎসর্গ করা হয়েছে।
HashMapগুলি তুলনামূলকভাবে দ্রুত, এবং একটি কী (key) জড়িত সব অপারেশনের জন্য অ্যামোর্টাইজড কনস্ট্যান্ট-টাইম কমপ্লেক্সিটি (O(1)) রয়েছে।
HashMap একটি জেনেরিক ডেটা স্ট্রাকচার, অর্থাৎ এটি কী (key) ও মান হিসেবে যেকোনো টাইপ ব্যবহার সমর্থন করে, কেবল একটি সীমাবদ্ধতাসহ: কোনো টাইপকে কী (key) টাইপ হিসেবে ব্যবহার করতে হলে তার দুটি ট্রেইটের ইমপ্লিমেন্টেশন থাকতে হবে: Eq এবং Hash। মান টাইপের উপর কোনো ট্রেইট বাউন্ড নেই।