面试题答案
一键面试以下是Rust代码实现:
use std::collections::HashMap;
fn main() {
let mut map: HashMap<String, Vec<i32>> = HashMap::new();
map.insert("key1".to_string(), vec![1, 2, 3]);
map.insert("key2".to_string(), vec![4, 5, 6]);
for (_, values) in map.iter() {
let sum: i32 = values.iter().sum();
println!("Sum for values: {}", sum);
}
}
这种方式能保证高效访问的原因:
- HashMap的遍历:
HashMap
的iter
方法可以高效地遍历其键值对。HashMap
内部使用哈希表结构存储数据,平均情况下,遍历操作的时间复杂度接近O(n),其中n是HashMap
中元素的数量。 - Vec的遍历:
Vec
是连续存储的数组,其iter
方法同样高效。连续存储使得在内存中访问元素时可以通过简单的指针偏移直接定位到下一个元素,这在现代CPU缓存机制下能有效减少内存访问延迟。遍历Vec
的时间复杂度也是接近O(m),其中m是Vec
中元素的数量。 - 求和操作:
sum
方法是基于迭代器的,在迭代过程中直接累加元素值,避免了额外的中间数据结构,进一步提高了效率。