fix: hashmap.md 第一题单词拼写错误

This commit is contained in:
greyhawk 2022-03-28 13:54:51 +08:00
parent 20e29eb595
commit ae6b655669
1 changed files with 15 additions and 6 deletions

View File

@ -1,12 +1,14 @@
# HashMap
`HashMap` 默认使用 `SipHash 1-3` 哈希算法,该算法对于抵抗 `HashDos` 攻击非常有效。在性能方面,如果你的 key 是中型大小的,那该算法非常不错,但是如果是小型的 key( 例如整数 )亦或是大型的 key ( 例如字符串 ),那你需要采用社区提供的其它算法来提高性能。
哈希表的算法是基于 Google 的 [SwissTable](https://abseil.io/blog/20180927-swisstables),你可以在[这里](https://github.com/abseil/abseil-cpp/blob/master/absl/container/internal/raw_hash_set.h)找到 C++ 的实现,同时在 [CppCon talk](https://www.youtube.com/watch?v=ncHmEUmJZf4) 上也有关于算法如何工作的演讲。
### 基本操作
1. 🌟🌟
```rust,editbale
```rust,editable
// 填空并修复错误
use std::collections::HashMap;
@ -37,6 +39,7 @@ fn main() {
```
2. 🌟🌟
```rust,editable
use std::collections::HashMap;
@ -63,6 +66,7 @@ fn main() {
```
3. 🌟🌟
```rust,editable
// 填空
@ -95,6 +99,7 @@ fn random_stat_buff() -> u8 {
```
### HashMap key 的限制
任何实现了 `Eq``Hash` 特征的类型都可以用于 `HashMap` 的 key包括:
- `bool` (虽然很少用到,因为它只能表达两种 key)
@ -105,8 +110,8 @@ fn random_stat_buff() -> u8 {
如果一个集合类型的所有字段都实现了 `Eq``Hash`,那该集合类型会自动实现 `Eq``Hash`。例如 `Vect<T>` 要实现 `Hash`,那么首先需要 `T` 实现 `Hash`
4. 🌟🌟
```rust,editable
// 修复错误
@ -143,9 +148,11 @@ fn main() {
```
### 容量
关于容量,我们在之前的 [Vector](https://zh.practice.rs/collections/vector.html#容量) 中有详细的介绍,而 `HashMap` 也可以调整容量: 你可以通过 `HashMap::with_capacity(uint)` 使用指定的容量来初始化,或者使用 `HashMap::new()` ,后者会提供一个默认的初始化容量。
#### 示例
```rust,editable
use std::collections::HashMap;
@ -169,10 +176,11 @@ fn main() {
```
### 所有权
对于实现了 `Copy` 特征的类型,例如 `i32`,那类型的值会被拷贝到 `HashMap` 中。而对于有所有权的类型,例如 `String`,它们的值的所有权将被转移到 `HashMap` 中。
5. 🌟🌟
```rust,editable
// 修复错误,尽可能少的去修改代码
// 不要移除任何代码行!
@ -195,6 +203,7 @@ fn main() {
```
### 三方库 Hash 库
在开头,我们提到过如果现有的 `SipHash 1-3` 的性能无法满足你的需求,那么可以使用社区提供的替代算法。
例如其中一个社区库的使用方式如下: