网站首页 > 精选教程 正文
为了便于开发者,rust 和其他语言一样(Java 有集合类、C++ STL等),提供常用的集合,譬如 动态数组和map,这篇文章就和大家一起捋一遍rust 里面常用的集合。
Vec
vec是最常用的动态数组。可以通过下面三种方式进行初始化。使用方式和Java 的ArrayList差不多。
let mut v = Vec::<i32>::new();
let mut v1 = vec![1,2,3];
let v2 : Vec<String> = Vec::with_capacity(1000);
然后我们可以往vec 里面追加数据
v1.push(4);
v1.push(5);
或者指定插入到某个位置,注意下标2 后面的每个元素将会后移一位。
v1.insert(2, 100);
如果希望替换某个下标的值,和数组操作一样,可以直接通过下标操作
v1[3] = 99;
如果希望安全地获取某个下标的元素,可以通过get方法,它返回了一个Option,我们可以通过解析 Option 判断这个下标对应的数据是否存在,避免越界异常。
let r : Option<&i32> = v1.get(100);
每一个vec 都是数组长度和容量两个属性
println!("{} {}",v1.len(),v1.capacity());
VecDeque
VecDeque是一个双向队列。在它的头部或者尾部执行添加或者删除操作,基本操作和vec 差别不大。
fn main() {
let mut queue = VecDeque::with_capacity(6);
queue.push_back(9); //尾部添加
queue.push_front(1);//头部添加
println!("{:?}",queue.pop_front().unwrap()); //头部弹出
println!("{:?}",queue.pop_back().unwrap()); //尾部弹出
}
HashMap
HashMap几乎每种语言都提供了支持,rust 当然也支持 HashMap。下面代码创建一个HashMap,其中key 是person ,value 是电话号码。
#[derive(Hash, Eq, PartialEq, Debug)]
struct Person {
first_name: String,
last_name: String,
}
impl Person {
fn new(first: &str, last: &str) -> Self {
Person {
first_name: first.to_string(),
last_name: last.to_string(),
}
}
}
fn main() {
let mut book = HashMap::new();
book.insert(Person::new("John", "Smith"), "521-8976");
book.insert(Person::new("Sandra", "Dee"), "521-9655");
book.insert(Person::new("Ted", "Baker"), "418-4165");
let p = Person::new("John", "Smith");
// 查找键对应的值
if let Some(phone) = book.get(&p) {
println!("Phone number found: {}", phone);
}
// 删除
book.remove(&p);
// 查询是否存在
println!("Find key: {}", book.contains_key(&p));
}
上面的代码比较取巧直接使用了Hash这个 derive ,当然,我们也可以手动实现一个hash方法。这个和Java 里面重写 hash 方法类似。
BTreeMap
BTreeMap 是一个B 树,数据结构如下
rust BTreeMap的使用和上面的HashMap 差别不大,只不过不再实现hash方法,因为 BTreeMap是通过大小确定在树上的位置,所以,需要实现比较大小的能力。如下:
#[derive(Ord, PartialOrd, Eq, PartialEq, Debug)]
struct Person {
first_name: String,
last_name: String,
}
其他操作没啥区别。
- 上一篇: JAVA集合
- 下一篇: Java基础 —— 集合(二)
猜你喜欢
- 2024-12-27 Java集合、多线程、反射和Spring框架总结,源码解析
- 2024-12-27 面试官必问:Java中的JUC工具类详细揭秘
- 2024-12-27 C# 基础知识系列- 3 集合数组
- 2024-12-27 100个Java工具类之59:集合HashMap
- 2024-12-27 常见面试题之java系列
- 2024-12-27 初步认识Java集合框架
- 2024-12-27 java中常用第三方类库
- 2024-12-27 Java Collections 工具类集合框架中常用算法解析
- 2024-12-27 GUAVA集合类使用总结
- 2024-12-27 Java集合-Properties
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)