Languages: Python C C++ Go Java Ruby Rust Perl R ← Full TOC

← Rust Index

📦 std::collections — Vec, HashMap, BTreeMap, HashSet, VecDeque

Rust's standard collections. Vec<T> is the most common. HashMap requires keys to implement Hash + Eq. All operations return Option or Result — never panic on absent keys.

Docs: doc.rust-lang.org

📋 Types, Functions & Methods

NameSignatureDescription
Vec::newfn new() -> Vec<T>Create empty growable array
vec![]macro vec![1, 2, 3] → Vec<T>Create Vec from literals
v.pushfn push(&mut self, value: T)Append element to end
v.popfn pop(&mut self) -> Option<T>Remove and return last element
v.lenfn len(&self) -> usizeNumber of elements
v.is_emptyfn is_empty(&self) -> boolTrue if zero elements
v.getfn get(&self, index: usize) -> Option<&T>Get element by index (safe)
v.iterfn iter(&self) -> Iter<'_, T>Iterator over references
v.iter_mutfn iter_mut(&mut self) -> IterMut<'_, T>Iterator over mutable references
v.retainfn retain(&mut self, f: impl FnMut(&T)->bool)Keep elements satisfying predicate
v.sortfn sort(&mut self) where T: OrdSort in place (stable)
v.sort_byfn sort_by(&mut self, compare: impl FnMut(&T,&T)->Ordering)Sort with comparator
v.sort_by_keyfn sort_by_key<K: Ord>(&mut self, f: impl FnMut(&T)->K)Sort by key function
v.dedupfn dedup(&mut self) where T: PartialEqRemove consecutive duplicates
v.extendfn extend(&mut self, iter: impl IntoIterator<Item=T>)Append all items from iterator
v.drainfn drain(&mut self, range: R) -> Drain<'_,T>Remove and return elements in range
v.truncatefn truncate(&mut self, len: usize)Truncate to first len elements
v.windowsfn windows(&self, size: usize) -> Windows<'_,T>Sliding window iterator
v.chunksfn chunks(&self, size: usize) -> Chunks<'_,T>Non-overlapping chunk iterator
HashMap::newfn new() -> HashMap<K,V>Create empty hash map
map.insertfn insert(&mut self, k: K, v: V) -> Option<V>Insert; return old value if key existed
map.getfn get(&self, k: &Q) -> Option<&V>Get reference to value
map.get_mutfn get_mut(&mut self, k: &Q) -> Option<&mut V>Get mutable reference to value
map.contains_keyfn contains_key(&self, k: &Q) -> boolTrue if key exists
map.removefn remove(&mut self, k: &Q) -> Option<V>Remove and return value
map.entryfn entry(&mut self, key: K) -> Entry<'_,K,V>Ergonomic insert-or-modify
entry.or_insertfn or_insert(self, default: V) -> &mut VInsert default if absent; return &mut
entry.or_defaultfn or_default(self) -> &mut V where V: DefaultInsert Default::default() if absent
map.iterfn iter(&self) -> Iter<'_,K,V>Iterator over (&K, &V) pairs
BTreeMapstruct BTreeMap<K,V>Sorted map — keys must implement Ord
HashSetstruct HashSet<T>Unordered set — O(1) insert/contains
set.insertfn insert(&mut self, value: T) -> boolInsert value; return false if already present
set.containsfn contains(&self, value: &Q) -> boolTrue if set contains value
set.unionfn union(&self, other: &HashSet<T>) -> UnionIterator over all values in either set
set.intersectionfn intersection(&self, other: &HashSet<T>) -> IntersectionIterator over common values
set.differencefn difference(&self, other: &HashSet<T>) -> DifferenceValues in self but not other
VecDequestruct VecDeque<T>Double-ended queue — O(1) push/pop both ends
vd.push_backfn push_back(&mut self, value: T)Append to back
vd.push_frontfn push_front(&mut self, value: T)Prepend to front
vd.pop_frontfn pop_front(&mut self) -> Option<T>Remove from front

💡 Example

Save as main.rs in a Cargo project and run with cargo run.

use std::collections::{HashMap, BTreeMap, HashSet, VecDeque};

fn main() {
    // --- Vec ---
    let mut v: Vec<i32> = (1..=9).collect();
    v.retain(|&x| x % 2 != 0);
    println!("Odd: {:?}", v);
    v.sort_by(|a,b| b.cmp(a));
    println!("Sorted desc: {:?}", v);

    // Windows (sliding)
    let sums: Vec<i32> = v.windows(3).map(|w| w.iter().sum()).collect();
    println!("Window sums: {:?}", sums);

    // --- HashMap: word frequency ---
    let text = "go rust java go python rust go java rust";
    let mut freq: HashMap<&str, u32> = HashMap::new();
    for word in text.split_whitespace() {
        *freq.entry(word).or_insert(0) += 1;
    }
    let mut sorted: Vec<_> = freq.iter().collect();
    sorted.sort_by(|a,b| b.1.cmp(a.1));
    for (word, count) in &sorted {
        println!("  {:10} {}", word, count);
    }

    // --- BTreeMap (sorted) ---
    let mut scores: BTreeMap<&str, u32> = BTreeMap::new();
    scores.insert("Alice", 95); scores.insert("Bob", 87); scores.insert("Carol", 92);
    for (name, score) in &scores { println!("{}: {}", name, score); }

    // --- HashSet ---
    let a: HashSet<i32> = [1,2,3,4,5].iter().cloned().collect();
    let b: HashSet<i32> = [3,4,5,6,7].iter().cloned().collect();
    let mut inter: Vec<_> = a.intersection(&b).collect(); inter.sort();
    println!("Intersection: {:?}", inter);

    // --- VecDeque ---
    let mut dq: VecDeque<&str> = VecDeque::new();
    dq.push_back("first"); dq.push_back("second"); dq.push_front("zeroth");
    while let Some(item) = dq.pop_front() { println!("Dequeued: {}", item); }
}
// cargo run

← std::fs  |  🏠 Index  |  std::thread →