当前位置: 首页 > news >正文

rust语言集合库std::collections

 

在 Rust 2025 年的标准库中,
std::collections 的接口设计非常强调内存安全显式所有权 
以下是针对四大类常用集合的 增、删、改、查 操作的完整示例。 

1. Vec<T> (动态数组) — 最常用的线性集合 
适用于需要在末尾高效操作数据的场景。 
rust
fn main() {let mut v = vec![10, 20];// 【增】v.push(30);          // 末尾插入: [10, 20, 30]v.insert(1, 15);     // 指定索引插入: [10, 15, 20, 30] (性能 O(n))// 【查】let second = v[1];             // 下标访问 (越界会 panic)let safe_item = v.get(10);     // 安全访问: 返回 Option// 【改】v[0] = 100;                    // 直接修改if let Some(x) = v.get_mut(1) { *x += 10; } // 安全修改// 【删】v.pop();                       // 移除末尾: 返回 Some(30)v.remove(1);                   // 移除指定索引 (性能 O(n))v.retain(|&x| x > 10);         // 条件删除:仅保留大于10的元素
}
Use code with caution.

2. VecDeque<T> (双端队列) — 头尾高效操作 
通过循环缓冲区实现,两端操作均为
O(1)cap O open paren 1 close paren
𝑂(1)
 
rust
use std::collections::VecDeque;fn main() {let mut dq = VecDeque::from([2, 3]);// 【增】dq.push_back(4);    // 尾部增: [2, 3, 4]dq.push_front(1);   // 头部增: [1, 2, 3, 4]// 【删】dq.pop_front();     // 头部删: Some(1)dq.pop_back();      // 尾部删: Some(4)// 【查/改】与 Vec 类似dq[0] = 10;         // 通过索引修改let _ = dq.front(); // 查看头部
}
Use code with caution.

3. HashMap<K, V> (哈希映射) — 键值对存储 
Entry API 是 Rust 修改 Map 的最优雅方式,可避免双次哈希查找。 
rust
use std::collections::HashMap;fn main() {let mut map = HashMap::new();// 【增/改】map.insert("ID_1", 100);       // 插入或覆盖旧值// 【Entry API 强力改】// 如果不存在则插入 0,如果存在则获取其引用并自增map.entry("ID_2").and_modify(|v| *v += 1).or_insert(0);// 【查】let score = map.get("ID_1");   // 返回 Option<&V>if map.contains_key("ID_1") { /* 检查是否存在 */ }// 【删】map.remove("ID_1");            // 删除并返回被删除的值
}
Use code with caution.

4. BTreeSet<T> / HashSet<T> (集合) — 唯一性存储 
BTreeSet 保证元素有序,HashSet 性能更高(无序)。 
rust
use std::collections::BTreeSet;fn main() {let mut set = BTreeSet::new();// 【增】set.insert(50);set.insert(10);set.insert(30);// 【查】if set.contains(&10) { /* ... */ }let first = set.first();       // BTreeSet 特有:获取最小值 (10)// 【删】set.remove(&30);// 【集合特有操作:并/交/差】let other_set = BTreeSet::from([50, 60]);let diff: Vec<_> = set.difference(&other_set).collect(); // 存在于 set 但不在 other_set 中的
}
Use code with caution.

5. 接口对比总结与 2025 建议 
操作 VecVecDequeHashMapBinaryHeap
头增/删
O(n)cap O open paren n close paren
𝑂(𝑛)
O(1)cap O open paren 1 close paren
𝑂(1)
N/A N/A
尾增/删
O(1)cap O open paren 1 close paren
𝑂(1)
O(1)cap O open paren 1 close paren
𝑂(1)
N/A
O(logn)cap O open paren log n close paren
𝑂(log𝑛)
随机访问
O(1)cap O open paren 1 close paren
𝑂(1)
O(1)cap O open paren 1 close paren
𝑂(1)
O(1)cap O open paren 1 close paren
𝑂(1)
(平均)
N/A (仅能看最大值)
搜索
O(n)cap O open paren n close paren
𝑂(𝑛)
O(n)cap O open paren n close paren
𝑂(𝑛)
O(1)cap O open paren 1 close paren
𝑂(1)
N/A
开发避坑与性能建议:
  1. 使用 capacity:如果知道数据量,增删前使用 reserve(n)with_capacity(n),能显著减少内存分配开销。
  2. 原地修改:优先使用 retainextract_if (2025 年在某些集合中已稳定) 进行批量删除。
  3. 所有权转换:善用 into_iter() 进行消耗性迭代,或者 drain(..) 清空并获取元素所有权。

默认哈希算法安全性:HashMap 默认使用 SipHash 算法,能防御哈希洪水攻击(DoS),但速度略慢。如果在非网络环境下追求极限速度,可改用 rustc-hash 等高性能哈希器。

    1. 容量预分配:所有集合在扩容时都会发生内存分配和数据迁移。如果已知数据量,请务必使用 with_capacity(n)
    2. Entry API:在操作 Map 时,优先使用 entry() 而不是先 contains_key() 再 insert(),这样可以避免两次哈希查找,提升一倍性能。
    3. 栈与堆:如果集合大小在编译期固定且较小,考虑使用 arrayvec 等第三方库,避免堆内存分配。

 

http://www.jsqmd.com/news/112972/

相关文章:

  • ssl_ciphers 配置详解
  • 如何选择靠谱的四川二手车交易平台? - 百誉集团
  • 2025年口碑好的河南美缝剂厂家最新权威实力榜:煌瓷匠引领行业品质标杆 (1) - 朴素的承诺
  • MyBatis数据权限过滤实现
  • 2025年盘点:赛默飞Micro17离心机经销商/赛默飞ST1R离心机经销商|仟诺生物 - 品牌推荐大师
  • 必看!2025年四川二手豪车公司排行榜推荐 - 百誉集团
  • 2025年12月赛默飞371二氧化碳培养箱经销商 - 品牌推荐大师
  • 2025 年 12 月惠州空气能热水器源头工厂实力推荐榜:高效节能与稳定耐用的品质制造专家 - 品牌企业推荐师(官方)
  • 2025 年 12 月环保设备厂家权威推荐榜:高效搅拌机、耐用刮泥机、智能加药装置,专业水处理解决方案深度解析 - 品牌企业推荐师(官方)
  • 经验总结选购建议:2025年电池挤压试验机/电池针刺试验机哪家好?哪个牌子好?哪家强?行业领先企业推荐品牌/厂家:德迈盛测控 - 品牌推荐大师1
  • mysql数据导出和导入
  • 2025年不锈钢带生产商综合排名,不锈钢卷板/不锈钢压瓦板/双相不锈钢板/不锈钢带直销厂家哪家好 - 品牌推荐师
  • celery模块介绍
  • 浙江赛默飞设备经销商TOP1:仟诺生物,Micro17/Pico17/ST1R离心机+371培养箱全搞定! - 品牌推荐大师1
  • minio 桶 版本控制 文件备份恢复
  • minio 桶 版本控制 文件备份恢复
  • 初步接触微服务学习存档
  • 我认识的AHB2APB桥
  • 【2025珍藏】PH计(酸度计)哪家好,优质源头工厂品牌推荐榜 - 品牌推荐大师1
  • 2025最新郑州办公室租赁品牌首选推荐楷林K-WORK:全场景办公解决方案,助力企业高效发展 - 全局中转站
  • 第一次参加线上多人项目总结以及一些碎碎念
  • 第一次参加线上多人项目总结以及一些碎碎念
  • 跨年发票财税处理全攻略:一篇文章说清所有问题! - 财税记事本
  • 南昌企业线上获客新思路:GEO优化与AI搜索推广如何破解流量困局 - 优质品牌推荐TOP榜
  • zzCLIP究竟是什么?多模态大模型的基石
  • 嵌入式UI框架-抗锯齿画圆弧算法
  • 嵌入式UI框架-抗锯齿画圆弧算法
  • 《lvgl基础学习 —— 页面切换》
  • 2025最新IFM行政外包服务办公一体化服务品牌首要推荐楷林K-WORK:全场景赋能,这家企业办公服务商实力领先 - 全局中转站
  • 2025L班第一次作业