28_HashMap更新

1. 概述

HashMap的大小是可以变化,也就是说键值对的数量可以变化,但是每个K同时只能对应一个V。更新HashMap中的数据有以下几种选择

当K存在时

  • 替换现有的V
  • 保留现有的V,忽略新的V
  • 基于现有的V来更新V

当K不存在时

  • 添加一对新的K, V

2. 更新操作

2.1 替换现有的V

如果向HashMap插入一对KV,然后再插入同样的K,但是不同的V,那么原来的V会被替换掉,如下示例代码

Rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert(String::from("Blue", 10));
    scores.insert(String::from("Blue", 25));

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

2.2 只在K不存在任何值的情况下才插入V

entry方法,会检查指定的K是否存在一个对应的V,参数为K,返回值为 enum Enrty,代表是否存在。Entry的or_insert()方法,如果K存在,返回对应的V的一个可变引用;如果K不存在,将方法作为K的新值插进去,返回到这个值的可变引用。如下示例代码

Rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.entry(String::from("Blue")).or_insert(50);
    scores.entry(String::from("Blue")).or_insert(50);

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

2.3 基于现有的V来更新V

如下示例代码

Rust 复制代码
use std::collections::HashMap;

fn main() {
    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;
    }

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

以上代码中,字符串调用split_whitespace方法实现按照空格分割成可遍历的单词集合数据,检测map集合该单词对应的K,如果不存在则调用or_insert方法插入0。最后将返回的值的引用进行 +1,即可实现单词计数的效果。

3. Hash函数

在默认情况下,HashMap使用了加密功能强大的HashMap函数,Hash函数可以抵抗拒绝服务(Dos)攻击。Hash函数不是可用的最快的Hash算法,但具有更好的安全性。

我们可以指定不同的hasher来切换到另一个函数,这里的hasher指的是实现了BuildHasher trait的类型。

相关推荐
yinuo5 分钟前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq44 分钟前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴1 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq1 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
anyup2 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos
BBBBBAAAAAi3 小时前
Claude Code安装记录
开发语言·前端·javascript
xiaolyuh1233 小时前
【XXL-JOB】 GLUE模式 底层实现原理
java·开发语言·前端·python·xxl-job
源码获取_wx:Fegn08953 小时前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
毕设十刻3 小时前
基于Vue的人事管理系统67zzz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
anyup3 小时前
从赛场到产品:分享我在高德大赛现场学到的技术、产品与心得
前端·harmonyos·产品