We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 31fdbf8 commit 7275246Copy full SHA for 7275246
docs/Java 容器.md
@@ -253,10 +253,22 @@ Node<K,V> next:next就是用于链表的指向。
253
254
map.put("a","b")的整个流程:
255
256
-1. 计算出a字符串的hashcode值,然后执行扰动函数hash得到a的hash值。
257
-2. 构造出Node对象,其中包含了hash,Key,Value,Next。
258
-3. 然后通过路由算法找出node应存放在数组的位置。
259
-4. 判断该位置是否有hash和key值不相同的元素,如果有就使用拉链法解决。
+map.put("a","b")的整个流程:
+
+ 1. 先判断散列表是否没有初始化或者为空,如果是就扩容
+ 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. 判断是否需要扩容,如果需要就扩容。
272
273
下面上源码:
274
0 commit comments