Skip to content

Commit 1be901b

Browse files
committedDec 8, 2019
auto commit
1 parent 3774c15 commit 1be901b

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed
 

‎docs/notes/Java 容器.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -659,9 +659,9 @@ static int indexFor(int h, int length) {
659659

660660
### 5. 扩容-基本原理
661661

662-
设 HashMap 的 table 长度为 M,需要存储的键值对数量为 N,如果哈希函数满足均匀性的要求,那么每条链表的长度大约为 N/M,因此平均查找次数的复杂度为 O(N/M)。
662+
设 HashMap 的 table 长度为 M,需要存储的键值对数量为 N,如果哈希函数满足均匀性的要求,那么每条链表的长度大约为 N/M,因此查找的复杂度为 O(N/M)。
663663

664-
为了让查找的成本降低,应该尽可能使得 N/M 尽可能小,因此需要保证 M 尽可能大,也就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。
664+
为了让查找的成本降低,应该使 N/M 尽可能小,因此需要保证 M 尽可能大,也就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。
665665

666666
和扩容相关的参数主要有:capacity、size、threshold 和 load_factor。
667667

@@ -670,7 +670,7 @@ static int indexFor(int h, int length) {
670670
| capacity | table 的容量大小,默认为 16。需要注意的是 capacity 必须保证为 2 的 n 次方。|
671671
| size | 键值对数量。 |
672672
| threshold | size 的临界值,当 size 大于等于 threshold 就必须进行扩容操作。 |
673-
| loadFactor | 装载因子,table 能够使用的比例,threshold = (int)(newCapacity * loadFactor)。|
673+
| loadFactor | 装载因子,table 能够使用的比例,threshold = (int)(capacity* loadFactor)。 |
674674

675675
```java
676676
static final int DEFAULT_INITIAL_CAPACITY = 16;
@@ -800,6 +800,8 @@ static final int tableSizeFor(int cap) {
800800

801801
### 1. 存储结构
802802

803+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191209001038024.png"/> </div><br>
804+
803805
```java
804806
static final class HashEntry<K,V> {
805807
final int hash;
@@ -843,8 +845,6 @@ final Segment<K,V>[] segments;
843845
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
844846
```
845847

846-
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/db808eff-31d7-4229-a4ad-b8ae71870a3a.png" width="550px"> </div><br>
847-
848848
### 2. size 操作
849849

850850
每个 Segment 维护了一个 count 变量来统计该 Segment 中的键值对个数。

‎notes/Java 容器.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -659,9 +659,9 @@ static int indexFor(int h, int length) {
659659

660660
### 5. 扩容-基本原理
661661

662-
设 HashMap 的 table 长度为 M,需要存储的键值对数量为 N,如果哈希函数满足均匀性的要求,那么每条链表的长度大约为 N/M,因此平均查找次数的复杂度为 O(N/M)。
662+
设 HashMap 的 table 长度为 M,需要存储的键值对数量为 N,如果哈希函数满足均匀性的要求,那么每条链表的长度大约为 N/M,因此查找的复杂度为 O(N/M)。
663663

664-
为了让查找的成本降低,应该尽可能使得 N/M 尽可能小,因此需要保证 M 尽可能大,也就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。
664+
为了让查找的成本降低,应该使 N/M 尽可能小,因此需要保证 M 尽可能大,也就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。
665665

666666
和扩容相关的参数主要有:capacity、size、threshold 和 load_factor。
667667

@@ -670,7 +670,7 @@ static int indexFor(int h, int length) {
670670
| capacity | table 的容量大小,默认为 16。需要注意的是 capacity 必须保证为 2 的 n 次方。|
671671
| size | 键值对数量。 |
672672
| threshold | size 的临界值,当 size 大于等于 threshold 就必须进行扩容操作。 |
673-
| loadFactor | 装载因子,table 能够使用的比例,threshold = (int)(newCapacity * loadFactor)。|
673+
| loadFactor | 装载因子,table 能够使用的比例,threshold = (int)(capacity* loadFactor)。 |
674674

675675
```java
676676
static final int DEFAULT_INITIAL_CAPACITY = 16;
@@ -800,6 +800,8 @@ static final int tableSizeFor(int cap) {
800800

801801
### 1. 存储结构
802802

803+
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191209001038024.png"/> </div><br>
804+
803805
```java
804806
static final class HashEntry<K,V> {
805807
final int hash;
@@ -843,8 +845,6 @@ final Segment<K,V>[] segments;
843845
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
844846
```
845847

846-
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/db808eff-31d7-4229-a4ad-b8ae71870a3a.png" width="550px"> </div><br>
847-
848848
### 2. size 操作
849849

850850
每个 Segment 维护了一个 count 变量来统计该 Segment 中的键值对个数。
61.4 KB
Loading
61.4 KB
Loading

0 commit comments

Comments
 (0)