1. HashMap的底层实现,HashSet的底层实现
HashMap在JDK1.8之前是数组+链表,JDK1.8之后 是数组+链表/红黑树。
HashSet的底层是HashMap。
2. HashMap的put方法的底层原理
1.根据key的hashCode计算出数组index。
2.落槽时
1.如果数组中节点为null,创建新的节点对象,把k,v存储在节点对象中,把节点对象存储在数组中。
2.如果数组的节点不为nu1l,判断节点的key与插入元素的key是否相等。
1.相等,直接用新的k, v覆盖原节点中的k,v。
2.不相等,判断此时节点是否为红黑树。
1.是红黑树,创建红黑树节点对象存储k,v,插入到红黑树中。
2.不是红黑树,创建链表节点对象存储k,v,插入到链表中,判断链表长度是否大于阈值8。
1.大于阈值8,链表转换为红黑树。
3.判断++size是否大于阈值,是就扩容。
3. HashMap的resize()扩容方法的底层原理
HashMap默认初始容量是16。
本文详细探讨了Java中HashMap的底层实现,包括JDK1.8后的数组+链表/红黑树结构,put方法的步骤,resize()扩容机制,以及为什么长度是2的幂次方。此外,还讲解了哈希函数和哈希码的概念,哈希碰撞及其解决策略,HashMap与TreeMap的区别,并提供了选择使用两者的情况。同时,提到了HashSet的实现基于HashMap,以及遍历HashSet和HashMap的不同方式。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=125612608&d=1&t=3&u=f0234519088245d78b37f81c6c176f14)
15万+

被折叠的 条评论
为什么被折叠?



