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的类型。

相关推荐
子兮曰22 分钟前
PHP漏洞危机,你的网站升级了吗?
前端·后端·php
jerrywus22 分钟前
给 Pi 装上生图插件:从登录报错到画出一只 200×200 的猫
前端·agent·claude
陈随易29 分钟前
搞钱点子之生态鱼缸
前端·后端·程序员
PBitW33 分钟前
从空目录到上线:我全程用 TRAE 做了一款微信小游戏合集(含一次完整架构重构)
前端·trae
不爱学英文的码字机器38 分钟前
从Q1迁到T1,同一个编号已经换了含义
前端·数据库·microsoft
云和数据.ChenGuang1 小时前
光哥说Python 循环导入(Circular Import)深度解析:成因、排查与解决方案
开发语言·前端·人工智能·python·langchain
avi91111 小时前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
fengci.1 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
Ward的AI产品实战1 小时前
开源 AI 网关 Magpie 调优终结篇:顺位排错、跨家族对抗审查与 5 大路由组重构(下篇)
前端·人工智能
Highcharts.js1 小时前
BI可视化图表“维护难”问题的解决方案
开发语言·前端·javascript·编辑器·ecmascript·bi·highcharts