探究动态数组的翻倍扩容策略、String 的 UTF-8 变长字节切片限制,以及 HashMap 的 SipHash 抗哈希碰撞攻击机制。

1. Vec<T> 的内存模型

Vec<T> 在栈上维护三元组:(pointer, capacity, length)。当 len == cap 时,添加元素会触发堆内存重新分配(通常翻倍),并将旧数据拷贝至新地址。

2. HashMap 与 Entry API

使用 entry API 可以避免重复哈希计算,实现极简的词频统计:

use std::collections::HashMap;

let text = "hello world wonderful world";
let mut map = HashMap::new();

for word in text.split_whitespace() {
    let count = map.entry(word).or_insert(0);
    *count += 1;
}