在Rust中不同类型的集合的详细介绍

738 阅读4分钟

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.链接表

链接列表允许在恒定的时间内推送和弹出两端的元素。如果你想要一个未知大小的VecVecDeque,请使用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需要元素实现EqHash特性。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();

谢谢你的阅读!!