Rust常用集合

Rust 的标准库(std::collections)提供了多种通用的集合数据结构。与基础的数组和元组不同,这些集合存储在 堆(Heap) 上,这意味着它们的大小可以在运行时动态增长或缩小。

1. 动态数组:Vec<T> (Vector)

rust 复制代码
fn main() {
    // 创建
    let mut v = vec![1, 2, 3];

    // 增加元素
    v.push(4);
    v.push(5);

    // 读取元素 (索引方式)
    let third = &v[2]; 
    println!("第三个元素是: {}", third);

    // 安全读取 (get 方法,返回 Option)
    match v.get(10) {
        Some(val) => println!("找到了: {}", val),
        None => println!("索引越界,没有第11个元素"),
    }

    // 遍历
    for i in &v {
        println!("{}", i);
    }
}

2. 字符串:String

rust 复制代码
fn main() {
    // 创建
    let mut s = String::from("Hello");

    // 更新
    s.push_str(", Rust!"); // 追加字符串切片
    s.push('🚀');          // 追加单个字符

    // 合并字符串
    let s1 = String::from("tic");
    let s2 = String::from("tac");
    let s3 = format!("{}-{}-{}", s1, s2, "toe"); // 使用 format! 宏不获取所有权
    
    println!("{}", s3); // tic-tac-toe
}

3. 哈希映射:HashMap<K, V>

rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    // 插入数据
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // 查询数据
    let team_name = String::from("Blue");
    let score = scores.get(&team_name); // 返回 Option<&i32>

    // 遍历
    for (key, value) in &scores {
        println!("{}: {}", key, value);
    }

    // 只有当键不存在时才插入 (Entry API)
    scores.entry(String::from("Red")).or_insert(30);
}
集合 核心逻辑 典型应用场景
Vec<T> 连续内存的动态数组 存储线性数据、任务清单、缓冲区。这是最通用的集合。
String UTF-8 编码的文本 存储和处理动态文本、用户输入、格式化字符串。
HashMap<K, V> 哈希键值对映射 数据库索引模拟、缓存系统、统计(如单词计数)。
VecDeque<T> 双端队列(环形缓冲区) 实现先进先出(FIFO)队列、广度优先搜索(BFS)。
HashSet<T> 唯一值的哈希集合 数据去重、成员身份快速验证(判断某项是否存在)。
BTreeMap<K, V> 基于 B 树的有序映射 需要按键(Key)排序存储数据,或进行范围查询时。
BinaryHeap<T> 二叉堆(优先队列) 始终获取最大/最小值的场景,如任务调度、Dijkstra 算法。
相关推荐
野犬寒鸦15 分钟前
从零起步学习并发编程 || 第四章:synchronized底层源码级讲解及项目实战应用案例
java·服务器·开发语言·jvm·后端·学习·面试
计算机毕设VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
没差c9 小时前
springboot集成flyway
java·spring boot·后端
三水不滴9 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
笨蛋不要掉眼泪10 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
sheji341613 小时前
【开题答辩全过程】以 基于SpringBoot的疗养院管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
短剑重铸之日13 小时前
《设计模式》第六篇:装饰器模式
java·后端·设计模式·装饰器模式
码界奇点14 小时前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
代码匠心15 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
分享牛15 小时前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask