Rust - HashMap
HashMap
1、键值对的形式存储数据,一个键(key)对应一个值(value)
2、通过Hash函数:决定如何在内存中存放K和V
- 适用场景:通过K(任何类型)来寻找数据,而不是索引
1、创建HashMap
1、创建空HashMap:new() 函数
2、添加数据:insert() 方法
2、HashMap注意事项
1、HashMap用的比较少,不在Prelude中
2、标准库对其支持比较少,没有内置的宏来创建HashMap
3、其数据是存放在heap上
4、是同构的,一个HashMap中
- 所有的k的类型必须一致
- 所有的v的类型必须一致
3、另一种创建HashMap的方式:collect方法
1、在元素类型为Tuple(元组)的Vector上使用collect方法,可以组建一个HashMaps
- 要求元组有两个值:一个作为K,一个作为V
- collect方法可以把数据整合成多种集合类型,包括HashMap
- 返回值需要显式的指明类型
4、HashMap的所有权
1、对于实现了Copy trait的类型(如i32),值都会被复制到HashMap中
2、对于拥有所有权的值(如string),值会被移动,所有权会被转移到HashMap中
5、访问HashMap的值
1、通过get()方法
6、遍历HashMap
1、通过for循环
7、更新HashMap
1、HashMap的大小可变
2、每个K同时只能对应一个V
3、更新HashMap中的数据
- K 存在,需要对V进行修改
- 替换现有的V
- 保留现有的v,忽略新的v
- 合并现有的v和新的v
- K不存在
- 添加新的k,v
情况一、替换现有的v
- 如果插入的k相同,v不同,那么后面的v的值会覆盖前面的值
情况二、只有K不对应任何值的情况下,才插入v
- 使用entry方法,判断k中是否有值,没有就使用or_insert方法插入
- 两个方法返回的都是引用