auto commit

This commit is contained in:
CyC2018 2019-12-09 00:10:51 +08:00
parent 3774c158f6
commit 1be901b6a1
4 changed files with 10 additions and 10 deletions

View File

@ -659,9 +659,9 @@ static int indexFor(int h, int length) {
### 5. 扩容-基本原理
HashMap table 长度为 M需要存储的键值对数量为 N如果哈希函数满足均匀性的要求那么每条链表的长度大约为 N/M因此平均查找次数的复杂度为 O(N/M)
HashMap table 长度为 M需要存储的键值对数量为 N如果哈希函数满足均匀性的要求那么每条链表的长度大约为 N/M因此查找的复杂度为 O(N/M)
为了让查找的成本降低应该尽可能使 N/M 尽可能小因此需要保证 M 尽可能大也就是说 table 要尽可能大HashMap 采用动态扩容来根据当前的 N 值来调整 M 使得空间效率和时间效率都能得到保证
为了让查找的成本降低应该使 N/M 尽可能小因此需要保证 M 尽可能大也就是说 table 要尽可能大HashMap 采用动态扩容来根据当前的 N 值来调整 M 使得空间效率和时间效率都能得到保证
和扩容相关的参数主要有capacitysizethreshold load_factor
@ -670,7 +670,7 @@ static int indexFor(int h, int length) {
| capacity | table 的容量大小默认为 16需要注意的是 capacity 必须保证为 2 n 次方|
| size | 键值对数量 |
| threshold | size 的临界值 size 大于等于 threshold 就必须进行扩容操作 |
| loadFactor | 装载因子table 能够使用的比例threshold = (int)(newCapacity * loadFactor)|
| loadFactor | 装载因子table 能够使用的比例threshold = (int)(capacity* loadFactor) |
```java
static final int DEFAULT_INITIAL_CAPACITY = 16;
@ -800,6 +800,8 @@ static final int tableSizeFor(int cap) {
### 1. 存储结构
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191209001038024.png"/> </div><br>
```java
static final class HashEntry<K,V> {
final int hash;
@ -843,8 +845,6 @@ final Segment<K,V>[] segments;
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
```
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/db808eff-31d7-4229-a4ad-b8ae71870a3a.png" width="550px"> </div><br>
### 2. size 操作
每个 Segment 维护了一个 count 变量来统计该 Segment 中的键值对个数

View File

@ -659,9 +659,9 @@ static int indexFor(int h, int length) {
### 5. 扩容-基本原理
HashMap table 长度为 M需要存储的键值对数量为 N如果哈希函数满足均匀性的要求那么每条链表的长度大约为 N/M因此平均查找次数的复杂度为 O(N/M)
HashMap table 长度为 M需要存储的键值对数量为 N如果哈希函数满足均匀性的要求那么每条链表的长度大约为 N/M因此查找的复杂度为 O(N/M)
为了让查找的成本降低应该尽可能使 N/M 尽可能小因此需要保证 M 尽可能大也就是说 table 要尽可能大HashMap 采用动态扩容来根据当前的 N 值来调整 M 使得空间效率和时间效率都能得到保证
为了让查找的成本降低应该使 N/M 尽可能小因此需要保证 M 尽可能大也就是说 table 要尽可能大HashMap 采用动态扩容来根据当前的 N 值来调整 M 使得空间效率和时间效率都能得到保证
和扩容相关的参数主要有capacitysizethreshold load_factor
@ -670,7 +670,7 @@ static int indexFor(int h, int length) {
| capacity | table 的容量大小默认为 16需要注意的是 capacity 必须保证为 2 n 次方|
| size | 键值对数量 |
| threshold | size 的临界值 size 大于等于 threshold 就必须进行扩容操作 |
| loadFactor | 装载因子table 能够使用的比例threshold = (int)(newCapacity * loadFactor)|
| loadFactor | 装载因子table 能够使用的比例threshold = (int)(capacity* loadFactor) |
```java
static final int DEFAULT_INITIAL_CAPACITY = 16;
@ -800,6 +800,8 @@ static final int tableSizeFor(int cap) {
### 1. 存储结构
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191209001038024.png"/> </div><br>
```java
static final class HashEntry<K,V> {
final int hash;
@ -843,8 +845,6 @@ final Segment<K,V>[] segments;
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
```
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/db808eff-31d7-4229-a4ad-b8ae71870a3a.png" width="550px"> </div><br>
### 2. size 操作
每个 Segment 维护了一个 count 变量来统计该 Segment 中的键值对个数

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB