You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust HashMap是否允许存储重复键?代码运行结果存疑

Rust HashMap 键唯一性与你的代码疑问解答

Rust的HashMap绝对不允许重复键,每个键在HashMap里只会存在一次,这点完全不用怀疑。

你看到字符'l'对应的Vec里有2和3两个索引,根本原因不是HashMap存了重复的'l'键,而是你的代码逻辑是往同一个键对应的Value容器里追加元素,而非覆盖键或者插入新键。

举个例子,你说的测验代码大概是这样的:

use std::collections::HashMap;

fn main() {
    let s = "hello!";
    let mut map = HashMap::new();

    for (idx, c) in s.chars().enumerate() {
        // 核心逻辑:如果键c不存在,就插入空Vec;如果存在,直接拿到这个Vec的可变引用
        map.entry(c).or_insert_with(Vec::new).push(idx);
    }

    println!("{:?}", map);
}

当遍历到第一个'l'(索引2)时,HashMap里还没有'l'这个键,所以会插入一个空Vec,然后把2推进去;遍历到第二个'l'(索引3)时,键'l'已经存在了,代码直接拿到之前那个Vec的可变引用,再把3推进去——整个过程中,HashMap里的'l'键始终只有一个,对应的Value是一个装了两个索引的Vec而已。

简单说:HashMap的键唯一是指键本身不会重复出现,但键对应的Value可以是能存多个值的类型(比如Vec),你代码里的操作是在给同一个键的Value添东西,不是加新键,自然不会被覆盖。

内容的提问来源于stack exchange,提问作者Soham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:20:58