diff --git a/docs/notes/Java 容器.md b/docs/notes/Java 容器.md index 155fbed6..771a095f 100644 --- a/docs/notes/Java 容器.md +++ b/docs/notes/Java 容器.md @@ -759,7 +759,7 @@ void transfer(Entry[] newTable) { ### 6. 扩容-重新计算桶下标 -在进行扩容时,需要把键值对重新放到对应的桶上。HashMap 使用了一个特殊的机制,可以降低重新计算桶下标的操作。 +在进行扩容时,需要把键值对重新计算桶下标,从而放到对应的桶上。在前面提到,HashMap 使用 hash%capacity 来确定桶下标。HashMap capacity 为 2 的 n 次方这一特点能够极大降低重新计算桶下标操作的复杂度。 假设原数组长度 capacity 为 16,扩容之后 new capacity 为 32: @@ -768,10 +768,10 @@ capacity : 00010000 new capacity : 00100000 ``` -对于一个 Key, +对于一个 Key,它的哈希值 hash 在第 5 位: -- 它的哈希值如果在第 5 位上为 0,那么取模得到的结果和之前一样; -- 如果为 1,那么得到的结果为原来的结果 +16。 +- 为 0,那么 hash%00010000 = hash%00100000,桶位置和原来一致; +- 为 1,hash%00010000 = hash%00100000 + 16,桶位置是原位置 + 16。 ### 7. 计算数组容量 diff --git a/notes/Java 容器.md b/notes/Java 容器.md index 1d80a523..8038e067 100644 --- a/notes/Java 容器.md +++ b/notes/Java 容器.md @@ -759,7 +759,7 @@ void transfer(Entry[] newTable) { ### 6. 扩容-重新计算桶下标 -在进行扩容时,需要把键值对重新放到对应的桶上。HashMap 使用了一个特殊的机制,可以降低重新计算桶下标的操作。 +在进行扩容时,需要把键值对重新计算桶下标,从而放到对应的桶上。在前面提到,HashMap 使用 hash%capacity 来确定桶下标。HashMap capacity 为 2 的 n 次方这一特点能够极大降低重新计算桶下标操作的复杂度。 假设原数组长度 capacity 为 16,扩容之后 new capacity 为 32: @@ -768,10 +768,10 @@ capacity : 00010000 new capacity : 00100000 ``` -对于一个 Key, +对于一个 Key,它的哈希值 hash 在第 5 位: -- 它的哈希值如果在第 5 位上为 0,那么取模得到的结果和之前一样; -- 如果为 1,那么得到的结果为原来的结果 +16。 +- 为 0,那么 hash%00010000 = hash%00100000,桶位置和原来一致; +- 为 1,hash%00010000 = hash%00100000 + 16,桶位置是原位置 + 16。 ### 7. 计算数组容量