一个日牯子
Home
Tags
GitHub
Author
2020-03-19
SVG
HTML
PDF
H
a
s
h
T
a
b
l
e
1
阅
读
笔
记
:
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
刨
根
问
底
并
发
编
程
C
o
n
t
e
n
t
s
C
o
l
l
e
c
t
i
o
n
s
.
s
y
n
c
h
r
o
n
i
z
e
d
M
a
p
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
H
a
s
h
T
a
b
l
e
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
操
作
操
作
我
们
知
道
不
是
的
,
而
内
部
采
取
了
同
步
操
作
,
是
线
程
安
全
的
。
然
而
有
趣
的
是
你
去
看
的
文
档
,
它
会
建
议
你
:
如
果
不
要
你
就
用
吧
,
否
则
你
用
好
了
。
一
般
如
果
对
线
程
安
全
有
要
求
,
我
们
有
如
下
的
一
些
选
择
:
C
o
l
l
e
c
t
i
o
n
s
.
s
y
n
c
h
r
o
n
i
z
e
d
M
a
p
这
个
实
现
很
粗
暴
,
实
际
上
就
是
将
的
各
个
操
作
都
进
行
了
包
装
和
同
步
:
p
r
i
v
a
t
e
s
t
a
t
i
c
c
l
a
s
s
S
y
n
c
h
r
o
n
i
z
e
d
M
a
p
<
K
,
V
>
i
m
p
l
e
m
e
n
t
s
M
a
p
<
K
,
V
>
,
S
e
r
i
a
l
i
z
a
b
l
e
{
p
r
i
v
a
t
e
f
i
n
a
l
M
a
p
<
K
,
V
>
m
;
/
/
B
a
c
k
i
n
g
M
a
p
f
i
n
a
l
O
b
j
e
c
t
m
u
t
e
x
;
S
y
n
c
h
r
o
n
i
z
e
d
M
a
p
(
M
a
p
<
K
,
V
>
m
)
{
t
h
i
s
.
m
=
O
b
j
e
c
t
s
.
r
e
q
u
i
r
e
N
o
n
N
u
l
l
(
m
)
;
m
u
t
e
x
=
t
h
i
s
;
}
在
构
造
函
数
中
传
入
了
原
来
的
,
以
及
一
个
对
象
锁
(
如
果
不
传
那
就
默
认
是
了
)
。
然
后
,
所
有
的
操
作
都
进
行
了
同
步
处
理
:
p
u
b
l
i
c
b
o
o
l
e
a
n
c
o
n
t
a
i
n
s
V
a
l
u
e
(
O
b
j
e
c
t
v
a
l
u
e
)
{
s
y
n
c
h
r
o
n
i
z
e
d
(
m
u
t
e
x
)
{
r
e
t
u
r
n
m
.
c
o
n
t
a
i
n
s
V
a
l
u
e
(
v
a
l
u
e
)
;
}
}
p
u
b
l
i
c
V
g
e
t
(
O
b
j
e
c
t
k
e
y
)
{
s
y
n
c
h
r
o
n
i
z
e
d
(
m
u
t
e
x
)
{
r
e
t
u
r
n
m
.
g
e
t
(
k
e
y
)
;
}
}
/
/
.
.
.
H
a
s
h
T
a
b
l
e
实
现
线
程
安
全
的
方
式
与
上
面
有
些
类
似
,
对
所
有
需
要
同
步
的
地
方
直
接
进
行
了
同
步
:
p
u
b
l
i
c
s
y
n
c
h
r
o
n
i
z
e
d
i
n
t
s
i
z
e
(
)
{
r
e
t
u
r
n
c
o
u
n
t
;
}
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
2
那
么
和
有
什
么
区
别
呢
?
除
了
同
步
之
外
,
总
结
下
来
有
以
下
几
点
:
允
许
一
个
的
,
也
可
以
为
;
但
是
不
允
许
作
为
或
者
是
才
引
入
的
是
基
于
接
口
实
现
的
(
以
及
)
都
是
不
允
许
值
作
为
和
的
,
主
要
的
原
因
是
因
为
要
支
持
并
发
,
假
设
调
用
g
e
t
(
k
e
y
)
得
到
了
,
你
是
不
能
确
认
是
不
存
在
,
还
是
说
存
在
但
是
值
为
。
在
非
并
发
场
景
下
可
以
通
过
c
o
n
t
a
i
n
s
(
k
e
y
)
来
判
断
是
否
真
的
存
在
,
但
是
在
并
发
场
景
下
,
很
可
能
会
被
其
他
线
程
修
改
。
在
注
释
中
有
这
样
的
解
释
:
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
在
和
中
实
现
差
别
较
大
,
在
中
采
用
分
段
锁
的
方
式
实
现
,
将
分
为
许
多
个
(
继
承
自
)
操
作
的
时
候
,
只
会
去
占
用
某
一
个
,
而
其
他
的
不
会
受
到
影
响
。
而
在
中
直
接
使
用
来
实
现
。
其
在
内
存
中
的
结
构
与
几
乎
相
同
了
。
g
e
t
操
作
p
u
b
l
i
c
V
g
e
t
(
O
b
j
e
c
t
k
e
y
)
{
N
o
d
e
<
K
,
V
>
[
]
t
a
b
;
N
o
d
e
<
K
,
V
>
e
,
p
;
i
n
t
n
,
e
h
;
K
e
k
;
/
/
得
到
最
终
的
h
a
s
h
值
(
将
高
位
混
合
到
低
位
去
避
免
哈
希
冲
突
)
i
n
t
h
=
s
p
r
e
a
d
(
k
e
y
.
h
a
s
h
C
o
d
e
(
)
)
;
i
f
(
(
t
a
b
=
t
a
b
l
e
)
!
=
n
u
l
l
&
&
(
n
=
t
a
b
.
l
e
n
g
t
h
)
>
0
&
&
/
/
(
n
-
1
)
&
h
计
算
出
所
在
的
i
n
d
e
x
值
(
与
H
a
s
h
M
a
p
相
同
)
(
e
=
t
a
b
A
t
(
t
a
b
,
(
n
-
1
)
&
h
)
)
!
=
n
u
l
l
)
{
/
/
如
果
哈
希
值
相
同
,
则
直
接
定
位
到
节
点
,
再
判
断
是
否
e
q
u
a
l
即
可
i
f
(
(
e
h
=
e
.
h
a
s
h
)
=
=
h
)
{
/
/
这
里
比
较
k
e
y
是
否
e
q
u
a
l
,
单
纯
只
凭
h
a
s
h
C
o
d
e
是
不
够
的
。
/
/
首
先
比
较
内
存
地
址
是
否
一
致
;
然
后
再
调
用
e
q
u
a
l
s
方
法
,
是
一
种
优
化
手
段
。
i
f
(
(
e
k
=
e
.
k
e
y
)
=
=
k
e
y
|
|
(
e
k
!
=
n
u
l
l
&
&
k
e
y
.
e
q
u
a
l
s
(
e
k
)
)
)
r
e
t
u
r
n
e
.
v
a
l
;
}
/
*
H
a
s
h
值
的
首
位
被
用
作
标
记
位
,
为
负
数
的
h
a
s
h
值
是
特
殊
的
节
点
(
也
就
是
红
黑
树
化
了
)
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
3
*
/
/
/
如
果
根
据
哈
希
值
没
有
匹
配
到
,
那
证
明
可
能
有
哈
希
冲
突
,
为
负
数
是
红
黑
树
则
在
树
中
查
找
e
l
s
e
i
f
(
e
h
<
0
)
r
e
t
u
r
n
(
p
=
e
.
f
i
n
d
(
h
,
k
e
y
)
)
!
=
n
u
l
l
?
p
.
v
a
l
:
n
u
l
l
;
/
/
否
则
是
普
通
的
链
表
,
在
链
表
中
一
直
朝
下
找
即
可
w
h
i
l
e
(
(
e
=
e
.
n
e
x
t
)
!
=
n
u
l
l
)
{
i
f
(
e
.
h
a
s
h
=
=
h
&
&
(
(
e
k
=
e
.
k
e
y
)
=
=
k
e
y
|
|
(
e
k
!
=
n
u
l
l
&
&
k
e
y
.
e
q
u
a
l
s
(
e
k
)
)
)
)
r
e
t
u
r
n
e
.
v
a
l
;
}
}
r
e
t
u
r
n
n
u
l
l
;
}
可
见
操
作
没
有
加
任
何
的
锁
,
而
是
通
过
将
t
r
a
n
s
i
e
n
t
v
o
l
a
t
i
l
e
N
o
d
e
<
K
,
V
>
[
]
t
a
b
l
e
;
将
设
置
为
来
保
证
可
见
性
的
。
t
r
a
n
s
i
e
n
t
v
o
l
a
t
i
l
e
N
o
d
e
<
K
,
V
>
[
]
t
a
b
l
e
;
s
t
a
t
i
c
c
l
a
s
s
N
o
d
e
<
K
,
V
>
i
m
p
l
e
m
e
n
t
s
M
a
p
.
E
n
t
r
y
<
K
,
V
>
{
f
i
n
a
l
i
n
t
h
a
s
h
;
f
i
n
a
l
K
k
e
y
;
v
o
l
a
t
i
l
e
V
v
a
l
;
v
o
l
a
t
i
l
e
N
o
d
e
<
K
,
V
>
n
e
x
t
;
/
/
.
.
.
}
p
u
t
操
作
f
i
n
a
l
V
p
u
t
V
a
l
(
K
k
e
y
,
V
v
a
l
u
e
,
b
o
o
l
e
a
n
o
n
l
y
I
f
A
b
s
e
n
t
)
{
i
f
(
k
e
y
=
=
n
u
l
l
|
|
v
a
l
u
e
=
=
n
u
l
l
)
t
h
r
o
w
n
e
w
N
u
l
l
P
o
i
n
t
e
r
E
x
c
e
p
t
i
o
n
(
)
;
i
n
t
h
a
s
h
=
s
p
r
e
a
d
(
k
e
y
.
h
a
s
h
C
o
d
e
(
)
)
;
i
n
t
b
i
n
C
o
u
n
t
=
0
;
f
o
r
(
N
o
d
e
<
K
,
V
>
[
]
t
a
b
=
t
a
b
l
e
;
;
)
{
N
o
d
e
<
K
,
V
>
f
;
i
n
t
n
,
i
,
f
h
;
/
/
因
为
是
懒
加
载
,
第
一
次
插
入
的
时
候
可
能
需
要
初
始
化
i
f
(
t
a
b
=
=
n
u
l
l
|
|
(
n
=
t
a
b
.
l
e
n
g
t
h
)
=
=
0
)
t
a
b
=
i
n
i
t
T
a
b
l
e
(
)
;
/
/
没
有
找
到
(
节
点
之
前
不
存
在
)
e
l
s
e
i
f
(
(
f
=
t
a
b
A
t
(
t
a
b
,
i
=
(
n
-
1
)
&
h
a
s
h
)
)
=
=
n
u
l
l
)
{
/
/
尝
试
C
A
S
插
入
节
点
到
空
桶
中
,
如
果
失
败
,
则
会
重
新
走
上
面
的
流
程
进
来
i
f
(
c
a
s
T
a
b
A
t
(
t
a
b
,
i
,
n
u
l
l
,
n
e
w
N
o
d
e
<
K
,
V
>
(
h
a
s
h
,
k
e
y
,
v
a
l
u
e
,
n
u
l
l
)
)
)
b
r
e
a
k
;
/
/
n
o
l
o
c
k
w
h
e
n
a
d
d
i
n
g
t
o
e
m
p
t
y
b
i
n
}
/
/
如
果
(
后
面
的
流
程
)
插
入
到
了
红
黑
树
中
,
会
导
致
首
节
点
改
变
,
所
以
这
个
地
方
需
要
帮
忙
更
改
过
来
e
l
s
e
i
f
(
(
f
h
=
f
.
h
a
s
h
)
=
=
M
O
V
E
D
)
t
a
b
=
h
e
l
p
T
r
a
n
s
f
e
r
(
t
a
b
,
f
)
;
e
l
s
e
{
V
o
l
d
V
a
l
=
n
u
l
l
;
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
4
/
/
f
为
当
前
定
位
到
的
桶
中
的
第
一
个
节
点
,
将
其
同
步
进
行
后
续
操
作
s
y
n
c
h
r
o
n
i
z
e
d
(
f
)
{
/
/
看
看
同
步
之
前
当
前
节
点
是
否
已
经
被
更
改
了
;
如
果
是
则
需
要
重
新
开
始
轮
回
i
f
(
t
a
b
A
t
(
t
a
b
,
i
)
=
=
f
)
{
/
/
普
通
链
表
i
f
(
f
h
>
=
0
)
{
b
i
n
C
o
u
n
t
=
1
;
f
o
r
(
N
o
d
e
<
K
,
V
>
e
=
f
;
;
+
+
b
i
n
C
o
u
n
t
)
{
K
e
k
;
/
/
如
果
已
经
存
在
值
i
f
(
e
.
h
a
s
h
=
=
h
a
s
h
&
&
(
(
e
k
=
e
.
k
e
y
)
=
=
k
e
y
|
|
(
e
k
!
=
n
u
l
l
&
&
k
e
y
.
e
q
u
a
l
s
(
e
k
)
)
)
)
{
o
l
d
V
a
l
=
e
.
v
a
l
;
i
f
(
!
o
n
l
y
I
f
A
b
s
e
n
t
)
e
.
v
a
l
=
v
a
l
u
e
;
b
r
e
a
k
;
}
/
/
不
存
在
则
新
增
一
个
节
点
,
插
入
到
链
表
尾
部
N
o
d
e
<
K
,
V
>
p
r
e
d
=
e
;
i
f
(
(
e
=
e
.
n
e
x
t
)
=
=
n
u
l
l
)
{
p
r
e
d
.
n
e
x
t
=
n
e
w
N
o
d
e
<
K
,
V
>
(
h
a
s
h
,
k
e
y
,
v
a
l
u
e
,
n
u
l
l
)
;
b
r
e
a
k
;
}
}
}
/
/
按
红
黑
树
处
理
e
l
s
e
i
f
(
f
i
n
s
t
a
n
c
e
o
f
T
r
e
e
B
i
n
)
{
N
o
d
e
<
K
,
V
>
p
;
b
i
n
C
o
u
n
t
=
2
;
i
f
(
(
p
=
(
(
T
r
e
e
B
i
n
<
K
,
V
>
)
f
)
.
p
u
t
T
r
e
e
V
a
l
(
h
a
s
h
,
k
e
y
,
v
a
l
u
e
)
)
!
=
n
u
l
l
)
{
o
l
d
V
a
l
=
p
.
v
a
l
;
i
f
(
!
o
n
l
y
I
f
A
b
s
e
n
t
)
p
.
v
a
l
=
v
a
l
u
e
;
}
}
}
}
i
f
(
b
i
n
C
o
u
n
t
!
=
0
)
{
i
f
(
b
i
n
C
o
u
n
t
>
=
T
R
E
E
I
F
Y
_
T
H
R
E
S
H
O
L
D
)
t
r
e
e
i
f
y
B
i
n
(
t
a
b
,
i
)
;
i
f
(
o
l
d
V
a
l
!
=
n
u
l
l
)
r
e
t
u
r
n
o
l
d
V
a
l
;
b
r
e
a
k
;
}
}
}
a
d
d
C
o
u
n
t
(
1
L
,
b
i
n
C
o
u
n
t
)
;
C
o
n
c
u
r
r
e
n
t
H
a
s
h
M
a
p
5
r
e
t
u
r
n
n
u
l
l
;
}
HTML view coming soon.
Download PDF
for the full formatted version.