rust数据结构

📅 2026/8/14 4:02:20
rust数据结构
Rust 的数据结构体系非常丰富从基础类型到标准库集合再到自定义结构覆盖了系统编程的方方面面。以下是核心分类一、标量类型Scalar Types表格类型说明示例i8/i16/i32/i64/i128/isize有符号整数let a: i32 42;u8/u16/u32/u64/u128/usize无符号整数let b: u8 255;f32/f64浮点数let c 3.14;默认 f64bool布尔值let d true;charUnicode 标量值4 字节let e 中;二、复合类型Compound Types1. 元组Tuplerustlet tup: (i32, f64, str) (500, 6.4, hi); let (x, y, z) tup; // 解构 let first tup.0; // 索引访问2. 数组Arrayrustlet arr [1, 2, 3, 4, 5]; let first arr[0]; let zeros [0; 5]; // [0, 0, 0, 0, 0] // 长度固定栈上分配三、标准库集合Collections表格结构特点常用场景VecT动态数组连续内存可变长列表StringUTF-8 可变字符串文本处理HashMapK, V哈希表O(1) 平均查找键值存储BTreeMapK, V有序键值对基于 B 树需要排序时HashSetT/BTreeSetT集合去重成员判断、交集并集VecDequeT双端队列两端频繁操作LinkedListT双向链表频繁中间插入删除BinaryHeapT最大堆优先队列rustuse std::collections::{HashMap, VecDeque, HashSet}; let mut v vec![1, 2, 3]; v.push(4); let mut map HashMap::new(); map.insert(key, value); let mut set HashSet::new(); set.insert(42);四、自定义数据结构1. 结构体Structrust// 命名字段 struct User { name: String, age: u32, } // 元组结构体 struct Point(f64, f64); // 单元结构体零大小类型 struct Marker;2. 枚举Enum—— Rust 的代数数据类型rustenum Message { Quit, // 无数据 Move { x: i32, y: i32 }, // 匿名结构体 Write(String), // 单个值 ChangeColor(i32, i32, i32), // 元组 } // 最经典的Option 和 Result enum OptionT { Some(T), None, } enum ResultT, E { Ok(T), Err(E), }五、智能指针与所有权相关表格类型所有权模型用途BoxT堆分配单所有权递归类型、大对象转移RcT引用计数多所有权单线程共享只读数据ArcT原子引用计数多线程跨线程共享RefCellT运行时借用检查单线程内部可变性MutexT/RwLockT线程安全内部可变性跨线程可变共享rustuse std::rc::Rc; use std::sync::Arc; use std::cell::RefCell; let boxed Box::new(5); let shared Rc::new(vec![1, 2, 3]); let cell RefCell::new(5); *cell.borrow_mut() 10;六、特殊类型表格类型说明T/mut T引用借用*const T/*mut T裸指针unsafefn(T) - U函数指针!(Never type)发散类型永不返回()(Unit type)空元组类似 void七、常用 trait 约束Rust 数据结构的能力常通过trait表达表格Trait能力Clone显式深拷贝.clone()Copy隐式按位复制仅栈上简单类型Debug格式化输出{:?}Display格式化输出{}PartialEq/Eq相等比较PartialOrd/Ord大小比较Hash哈希计算Default默认值Send/Sync线程安全标记rust#[derive(Debug, Clone, PartialEq)] struct Point { x: i32, y: i32, }总结对比图plain标量 ──→ 整数、浮点、bool、char │ 复合 ──→ 元组(T,)、数组[T; N] │ 集合 ──→ Vec、String、HashMap、HashSet、VecDeque... │ 自定义 ─→ struct、enum │ 智能指针 → Box、Rc、Arc、RefCell、Mutex...需要我深入讲解某个具体数据结构比如Vec的内存布局、HashMap的实现原理、或者如何设计一个自定义的链表吗