Rust的标准库包括一些非常有用的数据结构,称为集合。集合是指以某种方式持有零个或多个元素的东西,允许你列举这些元素,添加或删除元素,找到它们等等。
Rust的集合可以分为四个主要类别。
- 序列
- 地图
- 集合
- 杂项
序列集合
Rust中支持多种形式的序列。
- Vec
- VecDeque
- 链接列表
1.Vec :向量
向量允许你在一个单一的数据结构中存储一个以上的值,在内存中把所有的值放在一起。一个可连续增长的数组类型。当你有一个项目列表时,它们很有用,例如文件中的文本行或购物车中的项目价格。
初始化一个新的空的矢量
let mut vec = Vec::new();
插入元素在矢量中
vec.push(1);
vec.push(2);
删除元素从矢量
vec.remove(1);
创建一个数组使用向量
let mut vec = vec![1, 2, 3];
2.VecDeque
一个用可增长的环形缓冲器实现的双端队列。这种类型作为队列的默认用法是使用push_back来添加到队列中,使用pop_front来从队列中删除。由于VecDeque是一个环形缓冲区,其元素在内存中 不一定是连续的。
初始化一个新的空的VecDeque
use std::collections::VecDeque;
let mut vec = VecDeque::new();
插入元素in VecDeque
// pushing elements in the front of Deque
vec.push_front(1);
vec.push_front(2);
vec.push_front(3);
// pushing elements at the end of Deque
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
删除元素从VecDeque
// deleting element from the front of Deque
vec.pop_front();
// deleting element from the end of the Deque
vec.pop_back();
3.链接表
链接列表允许在恒定的时间内推送和弹出两端的元素。如果你想要一个未知大小的Vec或VecDeque,请使用Linked List。
初始化一个新的空的LinkedList
use std::collections::LinkedList;
let mut list = LinkedList::new();
插入元素在LinkedList中
// pushing elements in the front of linkedlist
list.push_front('a');
list.push_front('b');
// pushing elements at the end of linkedlist
list.push_back('c');
list.push_back('d');
删除元素来自LinkedList
// deleting element from the front of linkedlist
list.pop_front();
// deleting element from the end of linkedlist
list.pop_back();
性能
地图 集合
在地图集合中,每个项目都是由一个唯一的键来引用的。有些地图可以保持插入的顺序。
1.哈希图
HashMap <K,V>类型存储K类型的键到V类型的值的映射。 散列函数来决定如何将这些键和值放入内存。当你想通过使用索引而不是使用可以是任何类型的键来查找数据时,哈希图是非常有用的。
初始化一个新的空的HashMap
use std::collections::HashMap;
let mut map = HashMap::new();
插入元素in HashMap
map.insert(1,String::from("Rust"));
map.insert(2,String::from("Java"));
删除元素来自HashMap
map.remove(1);
map.remove(2);
2.BTreeMap
二进制搜索树 (BST)是排序地图的最佳选择。特别是,每个元素都存储在它自己单独的堆分配的节点中。如果你想要一个按键排序的地图,请使用BTreeMap。
初始化一个新的空的BTreeMap
use std::collections::BTreeMap;
let mut map = BTreeMap::new();
插入元素in BTreeMap
map.insert(1,String::from("Rust"));
map.insert(2,String::from("Java"));
删除元素来自BTreeMap
map.remove(1);
map.remove(2);
性能
集合
Rust集合是Rust编程语言中一个非常重要的数据结构。它是由数学集合理论衍生出来的。
1.哈希集
HashSet内部使用Hashmap来实现。 一个HashSet需要元素实现Eq和Hash特性。HashSet不允许有重复的值。HashSet允许有一个单一的空值。
初始化一个新的空的HashSet
use std::collections::HashSet;
let mut set = HashSet::new();
插入元素在HashSet中
set.insert(1,String::from("Rust"));
set.insert(2,String::from("Java"));
删除元素来自HashSet
set.remove(1);
set.remove(2);
2.BTreeSet
BTreeSet 是基于B-Tree的集合。当一个项目在集合中被修改时,如果该项目相对于任何其他项目的排序发生变化(由Ord特性决定),这将是一个逻辑错误。
初始化一个新的空的BTreeSet
use std::collections::BTreeSet;
let mut set = BTreeSet::new();
插入元素in BTreeSet
set.insert(1,String::from("Rust"));
set.insert(2,String::from("Java"));
删除元素来自BTreeSet
set.remove(1);
set.remove(2);
杂项
二进制堆
二进制堆是一个完整的二进制树。一个二进制堆通常表示为一个数组。一个二进制堆是最小堆或最大堆。
初始化一个新的空的最小二进制堆
可以使用std::cmp::Reverse或者自定义的Ord实现来使二进制堆成为最小堆。
use std::collections::BinaryHeap;
use std::cmp::Reverse;
let mut heap = BinaryHeap::new();
初始化一个新的空的最大二进制堆
std::collections::BinaryHeap单独被用来使二进制堆成为最大堆。
use std::collections::BinaryHeap;
let mut heap = BinaryHeap::new();
插入元素in BinaryHeap
heap.push(1);
heap.push(2);
heap.push(3);
删除元素from BinaryHeap
// Removes the greatest item from the binary heap and returns it, or None if it is empty.
heap.pop();
谢谢你的阅读!!