推荐答案
Rust 中常用的集合类型包括:
- Vec<t>: 动态数组,允许存储多个相同类型的元素,并且可以动态调整大小。
- VecDeque<t>: 双端队列,允许从队列的前端和后端高效地添加或移除元素。
- LinkedList<t>: 双向链表,适合频繁的插入和删除操作。
- HashMap<K, V>: 基于哈希表的键值对集合,允许通过键快速查找值。
- BTreeMap<K, V>: 基于平衡二叉树的键值对集合,键值对按顺序存储。
- HashSet<t>: 基于哈希表的集合,存储唯一的元素。
- BTreeSet<t>: 基于平衡二叉树的集合,元素按顺序存储且唯一。
- BinaryHeap<t>: 优先队列,通常用于实现最大堆或最小堆。
本题详细解读
Vec<t>
Vec<T> 是 Rust 中最常用的集合类型之一。它是一个动态数组,可以在运行时动态调整大小。Vec<T> 提供了高效的随机访问和尾部插入操作,但在中间插入或删除元素时性能较差。
let mut v = Vec::new();
v.push(1);
v.push(2);
println!("{:?}", v); // 输出: [1, 2]VecDeque<t>
VecDeque<T> 是一个双端队列,允许从队列的前端和后端高效地添加或移除元素。它适合需要频繁在两端进行操作的场景。
use std::collections::VecDeque;
let mut deque = VecDeque::new();
deque.push_back(1);
deque.push_front(0);
println!("{:?}", deque); // 输出: [0, 1]LinkedList<t>
LinkedList<T> 是一个双向链表,适合频繁的插入和删除操作。由于链表的特性,它在随机访问时性能较差。
use std::collections::LinkedList;
let mut list = LinkedList::new();
list.push_back(1);
list.push_front(0);
println!("{:?}", list); // 输出: [0, 1]HashMap<K, V>
HashMap<K, V> 是一个基于哈希表的键值对集合,允许通过键快速查找值。它的查找、插入和删除操作的平均时间复杂度为 O(1)。
use std::collections::HashMap;
let mut map = HashMap::new();
map.insert("key1", "value1");
map.insert("key2", "value2");
println!("{:?}", map.get("key1")); // 输出: Some("value1")BTreeMap<K, V>
BTreeMap<K, V> 是一个基于平衡二叉树的键值对集合,键值对按顺序存储。它的查找、插入和删除操作的时间复杂度为 O(log n)。
use std::collections::BTreeMap;
let mut map = BTreeMap::new();
map.insert(1, "value1");
map.insert(2, "value2");
println!("{:?}", map.get(&1)); // 输出: Some("value1")HashSet<t>
HashSet<T> 是一个基于哈希表的集合,存储唯一的元素。它的查找、插入和删除操作的平均时间复杂度为 O(1)。
use std::collections::HashSet;
let mut set = HashSet::new();
set.insert(1);
set.insert(2);
println!("{:?}", set.contains(&1)); // 输出: trueBTreeSet<t>
BTreeSet<T> 是一个基于平衡二叉树的集合,元素按顺序存储且唯一。它的查找、插入和删除操作的时间复杂度为 O(log n)。
use std::collections::BTreeSet;
let mut set = BTreeSet::new();
set.insert(1);
set.insert(2);
println!("{:?}", set.contains(&1)); // 输出: trueBinaryHeap<t>
BinaryHeap<T> 是一个优先队列,通常用于实现最大堆或最小堆。它允许高效地获取和移除最大或最小元素。
use std::collections::BinaryHeap;
let mut heap = BinaryHeap::new();
heap.push(1);
heap.push(2);
println!("{:?}", heap.pop()); // 输出: Some(2)