HashMap एक कंटेनर है जिसमें की-वैल्यू जोड़े संग्रहीत किए जा सकते हैं। अन्य प्रोग्रामिंग भाषाओं में इस डेटा स्ट्रक्चर को कभी-कभी असोसिएटिव ऐरे या हैश टेबल कहा जाता है। इस मैप में की का एक सेट होता है, जिनमें से प्रत्येक किसी विशेष वैल्यू से मैप होता है। उपयोगकर्ता उपयुक्त की पास करके संग्रहीत वैल्यू प्राप्त कर सकता है। उपयोगकर्ता की और उनसे जुड़ी वैल्यू को जोड़ भी सकता है और हटा भी सकता है।
HashMap एक जेनेरिक कलेक्शन है (मानक लाइब्रेरी के अधिकांश कलेक्शन की तरह) और इसलिए की के रूप में कई तरह के टाइप का समर्थन करता है, जिनमें उपयोगकर्ता-परिभाषित स्ट्रक्ट और टपल भी शामिल हैं। इसकी वैल्यू किसी भी टाइप की हो सकती है।
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"] का उपयोग कर सकते हैं। हालाँकि, यदि उपयुक्त की-वैल्यू जोड़ा HashMap में मौजूद नहीं है, तो यह ऑपरेशन पैनिक हो जाएगा।
इंडेक्सिंग ऑपरेटर के अलावा, HashMap में संग्रहीत वैल्यू एक्सेस करने के दो और तरीके हैं। पहला है get मेंबर फंक्शन का उपयोग करना:
if let Some(blue_score) = scores.get("Blue") {
println!("Blue scored: {blue_score} \n");
}
get अनुरोधित की के लिए संग्रहीत वैल्यू को एक्सेस करता है। यदि दी गई की HashMap में मौजूद नहीं है तो यह None लौटाता है, और यदि की मौजूद है तो Some(value) लौटाता है। Rust में Options के बारे में अधिक जानने के लिए, Options कॉन्सेप्ट देखें।
HashMap में संग्रहीत वैल्यू एक्सेस करने का दूसरा तरीका entry मेथड का उपयोग करना है। entry मेथड (या entry API) HashMap में की-वैल्यू जोड़े की एंट्री का रेफरेंस लौटाता है। एंट्री हैश में इस की की स्थिति को दर्शाती है। यदि की मौजूद नहीं है, तो एंट्री में कोई वैल्यू नहीं होती (और यह एक वैल्यू डालने की अनुमति देती है)।
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 तुलनात्मक रूप से तेज़ होते हैं, और एक ही की से जुड़े सभी ऑपरेशनों के लिए इनकी एमोर्टाइज़्ड कॉन्स्टेंट-टाइम कॉम्प्लेक्सिटी (O(1)) होती है।
HashMap एक जेनेरिक डेटा स्ट्रक्चर है, यानी यह की और वैल्यू के रूप में किसी भी टाइप का उपयोग कर सकता है, बस एक शर्त के साथ: किसी टाइप को की टाइप के रूप में उपयोग करने के लिए उसमें दो ट्रेट का इम्प्लीमेंटेशन होना चाहिए: Eq और Hash। वैल्यू टाइप पर कोई ट्रेट बाउंड नहीं होता।