Skip to content

Commit 7275246

Browse files
authored
Update Java 容器.md
1 parent 31fdbf8 commit 7275246

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

docs/Java 容器.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,22 @@ Node<K,V> next:next就是用于链表的指向。
253253

254254
map.put("a","b")的整个流程:
255255

256-
1. 计算出a字符串的hashcode值,然后执行扰动函数hash得到a的hash值。
257-
2. 构造出Node对象,其中包含了hash,Key,Value,Next。
258-
3. 然后通过路由算法找出node应存放在数组的位置。
259-
4. 判断该位置是否有hash和key值不相同的元素,如果有就使用拉链法解决。
256+
map.put("a","b")的整个流程:
257+
258+
1. 先判断散列表是否没有初始化或者为空,如果是就扩容
259+
2. 根据键值 key 计算 hash 值,得到要插入的数组索引
260+
3. 判断要插入的那个数组是否为空:
261+
1. 如果为空直接插入。
262+
2. 如果不为空,判断 key 的值是否是重复(用 equals 方法):
263+
1. 如果是就直接覆盖
264+
2. 如果不重复就再判断此节点是否已经是红黑树节点:
265+
1. 如果是红黑树节点就把新增节点放入树中
266+
2. 如果不是,就开始遍历链表:
267+
1. 循环判断直到链表最底部,到达底部就插入节点,然后判断是否大于链表长度是否大于8:
268+
1. 如果大于8就转换为红黑树
269+
2. 如果不大于8就继续下一步
270+
2. 到底部之前发现有重复的值,就覆盖。
271+
4. 判断是否需要扩容,如果需要就扩容。
260272

261273
下面上源码:
262274

0 commit comments

Comments
 (0)